auto 类型推导:自动推导数据类型
tip:使用 auto 声明的变量必须马上初始化,以让编译器推断出它的实际类型,并在编译时将 auto 占位符替换为真正的类型。
规则:
- 当不声明为指针或引用时,auto 的推导结果和初始化表达式抛弃引用和 cv 限定符后类型一致。
- 当声明为指针或引用时,auto 的推导结果将保持初始化表达式的 cv 属性。
限制:
void func(auto a = 1) {} // error: auto不能用于函数参数 struct Foo { auto a1_ = 0; // error: auto不能用于非静态成员变量 static const auto a2_ = 0; // OK: var2_ -> static const int }; template <typename T> struct b {}; int main(void) { int arr[10] = {0}; auto aa = ar; // OK: aa -> int * auto rr[10] = ar; // error: auto无法定义数组 b<int> r; b<auto> bb = r; // error: auto无法推导出模板参数 return 0; }
使用:使用迭代器定义时,可用auto简化。