@[TOC] 1.auto作用 auto关键字能够自动识别变量类型。 2. auto的原理 auto定义的变量会在编译阶段根据右值来推出auto变量的类型。 1.使用auto定义变量时必须对其进行初始化,在编译阶段编译
@[TOC]
1.auto作用
auto关键字能够自动识别变量类型。
2. auto的原理
auto定义的变量会在编译阶段根据右值来推出auto变量的类型。
1.使用auto定义变量时必须对其进行初始化,在编译阶段编译器需要根据初始化表达式来推导auto的实际类型。
2.因此auto并非是一种“类型”的声明,而是一个类型声明时的“占位符”,编译器在编译期会将auto替换为变量实际的类型。
3.使用auto的细则
3.1. auto与指针和引用结合起来使用
int main()
{
int a = 10;
auto b = a;
auto pa = &a;
auto* pb = &a;
auto& c = a;
return 0;
}
b是auto类型,会根据a的类型推导b的类型。 pa是指针,因为auto修饰的pa会根据右值(&a)来推导出pa的类型。 auto pa = &a和 auto *pa = &a是一样的写法。只不过是: auto *pa = &a规定pa必须是指针类型,不能是其他类型了。
auto *pa = 10;
这样的代码是错误的,auto* 规定了变量必须是指针类型。给一个10,10是一个字面量,默认是int类型。不符合规则。
3.2 在同一行定义多个变量
一行可以定义多个相同变量。
auto a = 1, b = 3;
注意:一行的变量必须相同。
auto c = 2, d = 3.14;
这样的代码就是错误的。
因为编译器实际只对第一个类型进行推导,然后用推导出来的类型定义其他变量。
3.3. auto不能作为函数的参数
因为编译器不能对形参的实际类型进行推导。
3.4auto不能作为数组的声明。
void TestAuto()
{
int a[] = {1,2,3};
auto b[] = {4,5,6};//错误
}
编译器不知道要开多大的空间。