C++ primer 第二章 2.5
typedef char *pstring;
const pstring cstr=0;//此时cstr为指向char的常量指针
const char *cstr=0;//此时cstr为指向char常量的指针
auto一般不保留顶层const,保留底层const,忽略引用。
decltype选择并返回操作数的数据类型,但不计算表达式的值
decltype(f()) sum=x;//sum为f()的返回值的类型。
decltype返回的变量类型包括顶层const和引用。(引用只有在decltype处不代表所指对象的同义词)
有些表达式向decltype返回一个引用类型。
int i=42, *p=&i, &r=i;
decltype(r+0) b;//正确,加法的结果是int, b是一个未初始化的int
decltype(*p) c;//错误,c是int&, 必须初始化。
如果decltype使用的是一个不加括号的变量,则得到的结果是该变量的类型,如果给变量加上一层或多层括号,则编译器会把它当成是一个表达式,变量是一种可以作为赋值语句左值的特殊表达式,这样decltype会得到引用类型。
decltype(i) e;//正确,e是int
decltype((i)) d;//错误,d是int&, 必须初始化。
decltype((variable))的结果永远是引用,而decltype()结果只有当variable本身就是一个引用时才是引用。