C++11 auto类型说明符

  编程时常常需要将表达式的值赋值给变量,这就要求在声明变量前知道表达式的类型,有时候很难预先知道,所以C++11新标准引入了auto类型说明符,其作用就是让编译器替我们去分析表达式的值类型,,auto让编译器通过初始值推算变量的类型,所以auto定义的变量必须有初始值。 

  如:  

auto result=val1+val2;//result初始化为val1和val2相加的结果

此处编译器会通过val1和val2相加的结果来推断result的类型,使用auto可以声明多个变量,但是要注意多个变量的类型要一致:

auto a=1, *p=&i;//正确
auto sz=0,pi=3.14;//错误:sz和pi的类型明显不符

 

复合类型、常量和auto

  编译器推断出来的auto类型有时候和初始值的类型并不完全一样,编译器会适当的改变结果类型来符合初始规则,比如对引用使用auto,我们知道引用其实就是使用引用的对象,特别是当引用作为初始值时,正真参与初始化的起始是对象的值,所以会出现下面的情况:

int a=0,&b=a;//b为a的引用
auto c=b;//此时c为int类型

另外,auto会忽略掉顶层const,而保留底层的const,如果希望auto推断出来的类型是一个顶层const,我们需要明确指出:

const int ci=i,&ri=ci;
auto b=ci;//b是一个普通的整数,顶层const被忽略 
auto c=ri;//c也只是普通的整数,顶层const被忽略
auto d=&i;//d为整型指针
auto e=&ci;//e是一个指向整数常量的指针(对const对象取地址是底层const操作)
const auto f=ci;//明确指出const

对于引用的类型设为auto,原来的初始化规则依然适用:

auto &g=ci;//g为整型常量的引用
const auto &j=42;//j为整型常量的引用

设置一个类型为auto引用时,初始值中的顶层const保留,因为使用了引用后顶层const 就变为底层const了!

 

posted on 2017-08-24 15:55  CodeBeauty  阅读(858)  评论(0编辑  收藏  举报

导航