最近再看C++primer 5th,正好总结一下decltype和auto的用法,方便复习
auto定义的变量必须有初始值
使用auto可以在一条语句声明多个变量,但一条声明语句只能有一个基本数据类型
auto i=0,*p=&i;
auto sz=0,pi=3.2; //错误 sz和pi类型不一致
真正参与初始化的其实是引用对象的值,编译器以引用对象的类型作为auto的类型
int i=0,&r=i;
auto a=r; //a是int整数
auto一般会忽略顶层const,底层const保留下来
int i=0;
const int ci=i,&cr=ci;
auto b=ci; //int 忽略顶层
auto c=cr; //int
auto d=&i; //*int
auto e=&ci; //const *int 对 常量取地址是底层
const
设置auto引用时,顶层常量属性仍然保留
const int ci=9;
auto &m=ci,*p=&ci; //m常量引用,p指向常量的指针
decltype处理顶层const和引用的方式与auto有些不同
引用从来都是作为所指对象的同义词出现,只有用在decltype处是个例外
const int ci=0,&cj=ci;
decltype(ci) x=0; //const int
decltype(cj) y=x; //const int &
另一些特殊情况
int i=2,*p=&i,&r=i;
decltype(r+0) b; //int
decltype(*p) c; //c是int&,必须初始化
还有一个
decltype((i)) d; //d是int&
加双括号的是引用类型
就这么多把