作者:羽靜幻雲_100 | 来源:互联网 | 2023-02-11 10:10
我以为decltype((x))给出了&reference类型,但是有些实验显示了其他:
#include
int main(){
int x = 0;
decltype((x)) r = x;
r = 1;
printf("%d\n",x);
decltype((x+1)) i = x;
i = 2;
printf("%d\n",x);
decltype((1)) k = x;
k = 3;
printf("%d\n",x);
return 0;
}
我期待(x)和(x + 1)和(1)woul都给出"int&".然而,运行结果是
1
1
1
我期望运行结果应该是1,2,3,因为每个decltype检索引用,但似乎只有第一个工作,而两个(x + 1)和(1)只给出int,而不是'int&'.为什么,(x)和(x + 1)是不同的id-expression类型?
1> Kerrek SB..:
x + 1
是一个prvalue,所以它的decltype是公正的int
.相比之下,x
是一个id表达式,因此(x)
是一个左值,它的decltype是int&
.(有一个特殊规则,通过该规则,id-expression本身的decltype(例如x
)是声明变量的实际类型,并且必须将表达式括起来以获取表达式的值类别.)