auto
- 一个类型声明的“占位符”
auto x = 3; // auto -> int
使用auto声明的变量必须马上初始化,以让编译器推断出它的实际类型,并在编译时将auto占位符替换为真正的类型。
限制:
- 不能用于函数参数
void func(auto a=0);
- 不能用于非静态成员变量
struct Foo
{
auto var1 = 0; // error:auto不能用于非静态成员变量
static const int auto var2 = 0; // ok
}
- 无法定义数组
int arr[10] = {0};
auto rr[10] = arr; //error
- 无法推导出数组模板参数
Bar<int> bar;
Bar<auto> bb = bar; //error