作用:选择并返回操作数的数据类型,在此过程中,编译器分析表达式并得到它的类型,但不实际计算表达式的值。
例: decltype(f()) sum=x; //sum的类型就是f的返回类型
与auto的区别:
1.处理顶层const和引用的方式不同,如果decltype使用的表达式是一个变脸,则decltype返回该变量的类型
const int ci=0,&cj=ci;
decltype(ci) x = 0; //x的类型是const int
decltype(cj) y = x; //y的类型是const int&,y绑定到变量x
deltype(cj) z; //错误,z是一个引用,必须初始化
2.decltype的结果类型和表达式密切相关,对于使用decltype的表达式来说,如果变量名加上一对括号,则与不加括号时不同
int i=42;
decltype((i)) d; //错误,d是一个int& ,必须初始化
decltype(i) e; //正确,e是int
切记:
decltype((variable)) 的结果永远是引用而 decltype(variable)的结果只有当variable本身是一个引用时才是引用