C++11新标准引入,选择并返回操作数的数据类型
(1)顶层const和底层const均可以识别,auto只处理底层const
const int ci =0,&cj=ci;
decltype(ci) x = 0; //x的类型是const int
decltype(cj) y=x; //y的类型是const int&
(2)如果传入的是引用,返回的类型也是引用,不会因为引用本身不是个对象,而去取引用绑定的对象的数据类型
const int ci =0,&cj=ci;
decltype(ci) x = 0; //x的类型是const int
decltype(cj) y=x; //y的类型是const int&
(3)取表达式的类型,但不执行表达式
int a = 3, b=4
decltype(a) c=a;
decltype(a=b) d=a; //d是 int&
//执行之后a=3 b=4 c=3 d=3
(4)如果传入的是带有不是变量的表达式(如a+1),则取表达式计算结果的类型
int i=42;
decltype(i+2) b; //加法的结果时int,所以b是未初始化的int
(5)如果传入的时变量组成的表达式(如a+b),则返回引用类型
(6)如果传入的是(),则返回引用类型,不管()里的时什么如decltype((a)),返回的引用类型
(7)传入的如果时解引用操作,返回的数据类型是引用类型