- decltype是C++11引入的类型说明符,作用是选择并返回操作数的数据类型
decltype(f()) sum = x; //sum的类型就是函数f的返回类型
- 编译器并不实际调用函数,而是使用当调用发生时f的返回值类型作为sum的类型。
const int ci = 0, &cj = ci;
decltype(ci) x = 0; //x的类型是const int
decltype(cj) y = x; //y的类型是const int&,y绑定到变量x
decltype(cj) z; //错误:z是一个引用,必须初始化
- decltype的结果可以是引用类型
int i = 42, *p = &i, &r = I;
decltype(r + 0) b; //正确:加法的结果是int, 因此b是一个(未初始化的)int
decltype(*p) c; //错误:c是int&, 必项初始化。*p返回的是int&, 想想看为什么可以通过*p = 40来改变i的值,原因在于*p返回了引用, 是i的别名
- decltype ((variable))(双层括号)的结果永远是引用,而decltype(variable)的结果只有当variable本身就是一个引用时才是引用。
int i = 42;
decltype((i)) d; //错误:d是int&,必须初始化
decltype(i) e; //正确:e是一个(未初始化的)int