C++关键字之类型提示符 decltype

类型提示符的原理:

选择并返回操作数的数据结构,在此过程中,编译器分析表达式并得到它的类型,却不实际计算表达式的值。

使用方式:

int num = 0;
decltype(num++) sun = 7;
cout << num << " " << sun << endl;

结果输出0 7,decltype分析但不计算表达式 (num++) 的数据类型作为sun的数据类型,并将 7 作为初始值赋值为sun。

decltype处理方式:

  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是一个引用,必须初始化
注意示例:
引用从来都是以所指对象的同义词出现,只有decltype是一个例外。
  1. 当decltype的表达式不是一个变量,则decltype返回表达式结果对应的类型
int i = 42, *p = &i, &r = i;
decltype(r + 0) b;    // 正确,加法的结果是int,因此b是一个未初始化的int
decltype(*p) c;       // 错误,*p是取出p里面的值,而p存储的是i的地址,所以c是int&,必须初始化
  1. decltype表达式加括号与不加括号的区别
decltype(i) d;     // 正确,d是一个未初始化的int
decltype((i)) e;   // 错误,e是int&,必须初始化

如果表达式是不加括号的变量,则得到的结果是该变量的类型;
如果表达式是加一个或者多个括号的变量,则编译器会把它当作一个表达式,变量是一种可以作为赋值语句左值的特殊表达式,所以此时decltype得到的是引用类型。

猜你喜欢

转载自blog.csdn.net/weixin_44081533/article/details/119055473