decltype的重点

发布时间 2023-04-18 20:35:17作者: 小凉拖

1.如果表达式是一个变量,则返回该变量的类型,注意这个地方引用和引用所指向的对象是分开的:

1 int i=0;
2 int &r=i;

这里面如果使用decltype(i),则得到的是一个int类型变量,如果使用decltype(r),则得到的是一个int类型的引用而非int型变量。进一步的将如果r是一个常量引用,则得到的也将是一个常量引用。

2.如果表达式不是一个变量(是一个运算)则返回表达式的(运算)结果对应的类型,应该是一个具体的值的类型。

1 1 int i=42,&r=i;
2 2 decltype(r+0) b;//r是i的引用,i的值为42,42+0=42,而42是一个整型,则decltype得到的是一个整型

3.如果表达式的内容是解引用操作,则decltype将得到引用类型。

1 int i=42,*p=&i;
2 decltype(*p) c;//错误c是int&(整型的引用),必须初始化

4.如果是decltype((variable))则结果永远是引用,如果是decltype()结果还是该变量的类型(注意引用和引用所指的对象是分开的)