在C++11新标准中引入了新的类型说明符decltype,它的作用是选择并返回操作数的数据类型。
如:
decltype(fun()) var = x; // var的类型就是函数fun的返回类型
1. decltype 处理 const 和引用
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 是一个引用,必须初始化
2. decltype 和引用
int i = 42, *p = &i, &r = i;
decltype(r + 0) b; // 正确:加法的结果是 int ,因此 b 是一个(未初始化)int
decltype(*p) c; // 错误:c 是 int& ,必须初始化
decltype( (i) ) d; // 错误:d 是 int& ,必须初始化
decltype(i) e; // 正确:e是一个(未初始化的)int
注意:
- decltype( (variable) ) (注意是双层括号)的结果永远是引用
- decltype(variable) 结果只有当variable本身是一个引用时才是引用