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*