从表达式的类型推断出要定义的变量的类型,但是不想用该表达式的值初始化变量。
如:decltype(f()) sum = x;//sum的类型就是函数f 返回类型
1.decltype处理顶层const和引用的方式与auto不同。
decltype返回该变量的类型(顶层const 和 引用在内):
const int ci = 10, & cj = ci;
decltype(ci) k = 20;//const int
cout << "k:" << k << endl;
//k = 30;
decltype(cj) d = k;//const int &
//d = 100;
cout << "d:" << d << endl;
decltype(cj) z;//错误:const int & 需要初始化
2.如果decltype使用的是一个不加括号的变量,则得到的就是该变量的类型;
如果给变量加上了一层或多层括号,编译器就会把它当成一个表达式。
3.赋值是会产生引用的一类典型表达式,引用的类型就是左值的类型。
4.下面的 r + 0是一个具体的数值而非一个引用;
解引用指针可以得到指针所指的对象,而且还能给这个对象赋值,
因此decltype(*p)的类型是int&,而非int
以上内容来自,C++ primer 5