auto#
警告
在教学中你可能学过 auto int value = 0; 表示声明一个局部变量, 而 auto 可以省略. 这是已经弃用的用法, 不是此处要解释的内容.
auto 意在让编译器来推导 (deduce) 类型是什么.
1int value = 0;
2auto t = value; // t 的类型是 int
这其中的逻辑可以从报错信息来解释:
1int value = 0;
2int* pointer = value; // 错误: 不能用 int 类型的左值初始化 int*
好吧, 编译器你这么聪明, 报错信息里都能告诉我 value 的类型是 int. 我现在想通过 value 拷贝得到一个新对象, 编译器你自己分析它具体是什么类型吧:
1int value = 0;
2auto t = value; // 编译器分析出 t 的类型应该是 int
我们可以添加 const、& 和 * 等修饰符:
1int value = 0;
2
3auto const t1 = value; // t1 的类型是 int const
4auto& t2 = value; // t2 的类型是 int&
5auto const* t3 = &value; // t3 的类型是 int const*