C 11:DeclType((x))和DeclType(((x 1))的类型不同

C++11: the type of decltype((x)) and decltype((x+1)) are different?

本文关键字:DeclType 类型      更新时间:2023-10-16

我认为decltype((x))给出&参考类型,但一些实验显示了其他:

#include<stdio.h>
int main(){
    int x = 0;
    decltype((x)) r = x;
    r = 1;
    printf("%dn",x);
    decltype((x+1)) i = x;
    i = 2;
    printf("%dn",x);
    decltype((1)) k = x;
    k = 3;
    printf("%dn",x);
    return 0;
}

我期望(x)和(x 1)和(1)都会给出一个" int&amp;"。但是运行结果是

1
1
1

我期望运行结果应为1,2,3,因为每个声明都检索参考,但似乎只有第一个作品,而(x 1)an(1)仅给出INT,而不是'int&amp;'。为什么,(x)和(x 1)的不同ID-表达类型?

x + 1是一个prvalue,因此其声明只是 int。相比之下,x是ID表达式,因此(x)是LVALUE,其声明为int&。(有一个特殊的规则,通过该规则,ID表达本身的声明本身(例如x)是声明该变量的实际类型,您必须将括号化表达式以在表达式的值类别中获得。)<)