增量运算符与后缀混淆
Confusion about increment operator with postfix
我正在练习具有前缀和后缀两种变体的增量运算符。为了好玩,我写了下面的程序,这让我很困惑。程序的主体如下:
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
相关文章:
- 增量运算符与后缀混淆
- C++编译器如何扩展前缀和后缀运算符++()?
- 指向重载前缀和后缀运算符中的类对象的指针
- 输入迭代器 - 星号和后缀运算符
- 后缀运算符链表泛型节点迭代器
- 如何使用虚拟后缀运算符解决切片问题
- 前缀和后缀运算符 C++
- 后缀运算符不应该被视为二元运算符吗
- 虚拟参数在后缀运算符重载中的用途?C++
- while 循环中的后缀运算符
- 如何计算前缀和后缀运算符的组合
- C++ 重载'--'后缀运算符
- 前缀和后缀运算符的奇怪行为
- 流插入与后缀运算符相结合
- c++抽象基类后缀运算符
- 重载后缀运算符++
- 为什么要避免C++中的后缀运算符
- 后缀运算符重载顺序
- 是否允许使用后缀运算符++命名参数
- 重载后缀运算符不起作用