C++中递增和递减opreator的优先级

zw3*_*324 7 c++ increment decrement

我在我的gcc上尝试过这个:

int a=1;
cout<<(--a)--;
Run Code Online (Sandbox Code Playgroud)

输出为0; 但改成它

cout<<--(a--);
Run Code Online (Sandbox Code Playgroud)

导致错误(减值操作数需要左值).有人可以告诉我这件事吗?

谢谢!

Chr*_*utz 12

两个版本的++需要左值作为参数,但前缀版本返回左值作为参数,而后缀版本返回右值.

无论哪种方式,您都无法在序列点之间修改同一对象两次,因此您的"工作"示例会调用未查找行为.输出可以是编译器的感觉.如果您只是好奇地问好奇,但如果这与您的实际代码相关,那么您可能会做错事.


Tim*_*Tim 8

预先--a减少a,然后给你回复a.所以你可以继续以任何你想要的方式修改它,包括一个postdecrement.

postdecrement a--递减a但在递减之前给你一个值.它基本上是给你一份副本a.但是你不能再预先复制这个副本.它不是左值,所以没有什么可以减少的.这就是为什么这是一个错误.

a预定义视为返回引用,并将postdecrement视为以常量值返回.

  • "所以你可以继续以任何你想要的方式修改它,包括一个postdecrement." 呃,你_can_但这是不明确的行为. (3认同)