decltype(declare type,声明类型)为C++11 新增的关键字,和auto功能一样,用于在编译期间进行自动类型推导。
auto和decltype关键字都可以自动推导出变量的类型,但他们的用法是有区别的:
auto varname = value; decltype(exp) varname = value;
auto
会根据=
右边的初始值value推导出变量的类型,而decltype会根据exp表达式推导出变量的类型,跟=
右边的value没有关系。
此外,auto会要求变量必须初始化,而decltype不要求;
PS:exp 注意事项
原则上讲,exp 就是一个普通的表达式,它可以是任意复杂的形式,但是我们必须要保证 exp 的结果是有类型的,不能是 void;
举例:
int a = 0; decltype(a) b = 1; //b 被推导成了 int decltype(10.8) x = 5.5; //x 被推导成了 double decltype(x + 100) y; //y 被推导成了 double
使用 decltype(exp) 获取类型时,编译器将根据以下三条规则得出结果:
左值是指那些在表达式执行结束后依然存在的数据,也就是持久性的数据;右值是指那些在表达式执行结束后不再存在的数据,也就是临时性的数据。有一种很简单的方法来区分左值和右值,对表达式取地址,如果编译器不报错就为左值,否则为右值。
参考:http://c.biancheng.net/view/7151.html