【问题标题】:Pre increment operator预增量运算符
【发布时间】:2012-11-09 17:00:02
【问题描述】:
#include<iostream>
using namespace std;
int main()
{
    int i=2;
    cout<<++i<<" "<<++i;
    return 0;
}

为什么程序的输出是'4 4'而不是'3 4'?

【问题讨论】:

    标签: pre-increment


    【解决方案1】:

    因为这两个增量都发生在输出行之前。实际写入屏幕会延迟到整行运行完毕,但到那时 i 的引用已经更新了它的值。

    如果你将你的 cout 线分成两个离散的输出,事情会像你期望的那样评估。

    【讨论】:

    • 输出是否也取决于使用的编译器?
    • TBH,我不确定,但 cout 是一个流,一个流被构建然后作为一个整体被刷新,所以我的猜测是这种行为是不可避免的。
    【解决方案2】:

    您对同一个变量(两个增量)有两个副作用,它们之间没有序列点。所以它们可能以任何顺序发生,甚至可能交错——行为是未定义的。您似乎在这里得到了交错的行为——表达式++i 是增量我然后读取 i。所以你得到增量,增量,读取,读取。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-09-25
      • 2017-07-13
      • 1970-01-01
      • 1970-01-01
      • 2016-07-21
      • 1970-01-01
      • 2011-02-16
      • 1970-01-01
      相关资源
      最近更新 更多