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
两个版本的++
需要左值作为参数,但前缀版本返回左值作为参数,而后缀版本返回右值.
无论哪种方式,您都无法在序列点之间修改同一对象两次,因此您的"工作"示例会调用未查找行为.输出可以是编译器的感觉.如果您只是好奇地问好奇,但如果这与您的实际代码相关,那么您可能会做错事.
预先--a
减少a
,然后给你回复a
.所以你可以继续以任何你想要的方式修改它,包括一个postdecrement.
postdecrement a--
递减a
但在递减之前给你一个值.它基本上是给你一份副本a
.但是你不能再预先复制这个副本.它不是左值,所以没有什么可以减少的.这就是为什么这是一个错误.
将a
预定义视为返回引用,并将postdecrement视为以常量值返回.