增量运算符与后缀混淆

Confusion about increment operator with postfix

本文关键字:后缀 运算符      更新时间:2023-10-16

我正在练习具有前缀和后缀两种变体的增量运算符。为了好玩,我写了下面的程序,这让我很困惑。程序的主体如下:

int a=10;
a=a++; 
cout << a; 
  1. 我得到的输出是10。首先我认为这是真的,因为赋值是先完成的,然后a的值加1。所以yes输出应该是10,如图所示。

  2. 但几秒钟后,我想应该是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