1 auto关键字
C++中引入auto类型说明符,让编译器去识别表达式所属的类型。例如:
-
推导基本类型
auto i = 42; // 推导为 int 类型 auto d = 3.1415926535; // 推导为 double 类型 auto b = true; // 推导为 bool 类型
-
推导STL容器类型
vector<int> v = {1, 2, 3, 4, 5}; auto it = v.begin(); // 推导为 vector<int>::iterator 类型 auto val = v[2]; // 推导为 int 类型
-
推导函数返回值类型、
auto add(int a, int b) { return a + b; } auto result = add(1, 2); // 推导为 int 类型
1.1 auto使用注意问题
-
auto声明的变量必须初始化,具有初始值
-
auto不能作为函数参数
void func(auto x, auto y); //错误
-
不能用来声明数组
int arr1[3]={1,2,3}; auto arr2[3]={1,2,3}; //错误,不能用来声明数组
-
对象属性不能用auto定义,也不能用于定义非静态成员变量
-
auto无法推导出模板参数
-
当在一行中定义多个变量并使用auto推导它们的类型时,编译器会确保每个变量的推导结果不产生二义性。
auto x = 42, y = 3.14; // 错误!二义性的初始化 auto x = 42; auto y = 3.14; // 正确!明确的类型推导
2 decltype关键字
decltype用于获取表达式的类型,并将其作为变量或函数返回类型的一部分。例如:
- 推导变量类型
int x = 42; decltype(x) y; // 推导为 int 类型