int*p =&a ++和int*p =&+ a

sto*_*ren 0 c operator-keyword

代码很简单,我只想测试&和++之间的优先级.

int main()
{
    int a=10;
    int *p;
    int *q;
    p=&++a;//error: lvalue required as unary ‘&’ operand
    q=&a++;//error: lvalue required as unary ‘&’ operand
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

gcc编译它时,出现了两个错误.在我看来,这a++是一个正确的值,但它++a是一个左值,因此在使用&获取它时,它不应该是一个错误,

mer*_*011 5

你似乎误解了lvalue和之间的区别rvalue.在您的情况下,表达式a++++arvalues和不能分配.

是对区别的一个很好的描述,但是判断它是否是一个快速的方法lvalue是看看如果你把它放在一个左侧是否会出错=.

请注意,以下两个语句都会产生您描述的相同错误.

++a = 5;
a++ = 6;
Run Code Online (Sandbox Code Playgroud)

更新:正如下面提到的@mafso,++a确实是一种lvalue语言c++,在编译时你不会看到该表达式的错误g++.