C++ 自动推导类型 auto
- 自动推导类型
- 函数模板
- 类模板
C++
泛编程,也叫通用编程。包括三方面内容:
自动推导类型
、
函数模板
、
类模板
。
自动推导类型
在C++11
中,赋予了auto
全新的含义,不再用于修饰变量,而是作为一个类型指示符
,指示编译器在编译时推导auto声明的变量的数据类型。
语法:auto 变量名 = 初始值
#include <iostream>using namespace std;int main() {int n1 = 123; cout << "n1 = " << n1 << endl;auto n2 = 123; cout << "n2 = " << n2 << endl;double d1 = 123.456; cout << "d1 = " << d1 << endl;auto d2 = 123.456; cout << "d2 = " << d2 << endl;string s1 = "Hello, World!"; cout << "s1 = " << s1 << endl;auto s2 = "Hello, World!"; cout << "s2 = " << s2 << endl;return 0;
}
编译器会根据等号右边的数据,自动推导出变量的数据类型。编译运行结果如下:
n1 = 123
n2 = 123
d1 = 123.456
d2 = 123.456
s1 = Hello, World!
s2 = Hello, World!
注意:
auto
声明的变量必须在定义时初始化
。没有定义的话,那什么来推导?- 初始化的右值可以是
具体的数值
,也可以是表达式
和函数返回值
等。 auto
不能作为函数的形参类型。auto
不能直接声明数组。auto
不能定义类的非静态成员变量。
#include <iostream> // 包含头文件。
using namespace std; // 指定缺省的命名空间。double func(double n1, const char* n2, float n3, short n4, long n5)
{cout << "n1 = " << n1 << ", n2 = " << n2 << ", n3 = " << n3 << ", n4 = " << n4 << ", n5 = " << n5 << endl;return 1.2345;
}int main()
{// 声明函数指针 方法1double (*pf_1)( double , const char* , float , short , long ); // 声明函数指针pf。pf_1 = func; // 函数指针pf指向func函数pf_1(1.2345, "abcd", 3, 4, 5);// 声明函数指针 方法2auto pf_2 = func;pf_2(2.222, "aaaaa", 222, 222, 222);
}
编译运行结果如下:
n1 = 1.2345, n2 = abcd, n3 = 3, n4 = 4, n5 = 5
n1 = 2.222, n2 = aaaaa, n3 = 222, n4 = 222, n5 = 222
不要滥用auto
,auto
在编程时真正的用途
如下:
- 代替
冗长复杂
的变量声明(两种方法声明函数指针,方法2代码少) - 在模板中,用于声明依赖模板参数的变量。
- 函数模板依赖模板参数的返回值
- 用于lambda表达式中
函数模板
链接:C++ 泛编程 —— 函数模版(上)
链接:C++ 泛编程 —— 函数模版(中)
链接:C++ 泛编程 —— 函数模版(下)
类模板
链接:C++ 泛编程 —— 类模版(上)
未完待续
感谢浏览,一起学习!