我正在练习具有前缀和后缀两种变体的增量运算符。为了好玩,我写了下面的程序,这让我很困惑。程序的主体如下:
int a=10;
a=a++;
cout << a;
我得到的输出是10。首先我认为这是真的,因为赋值是先完成的,然后a的值加1。所以yes输出应该是10,如图所示。
但几秒钟后,我想应该是11。因为当第二个语句完成时,即使a被赋值为10,我们也会立即将其递增1。所以输出应该是11。这里出了什么问题?谢谢
您可以这样想代码:
int a = 10;
int temp = a++;
a = temp;
cout << a;
分配的左手边和右手边都必须在实际分配之前计算,这意味着增加分配的副作用将在分配之前计算(见此答案(。所以,真正发生的是,a++
返回10,然后将a
递增到11,但随后a
被设置为10
的旧值,所以最终什么都没有发生。
在您的代码中:
int a=10;//assign value
a=a++;//assign then increase means a = 10 (intermediatly a=11) but it assign value before that.
cout << a; //print