C ++ 11:无序修改和访问变量(流)

时间:2014-10-15 08:19:40

标签: c++ c++11 clang

我最近想要更好地了解++ i和i ++运算符的返回值。所以我在这里创建了这个小程序:

#include <iostream>
using namespace std;
int main()
{
    int i = 0;
    int j = 0;
    cout << "i++ " << i++ << " i " << i << endl;
    cout << "++j " << ++j << " j " << j << endl;
}

现在看一下代码,我希望在执行它时得到以下结果:

i++ 0 i 1
++j 1 j 1

使用llvm / clang 3.5(Apple LLVM版本6.0(clang-600.0.51))编译上述代码段会产生以下警告:

main.cpp:8:23: warning: unsequenced modification and access to 'j'
      [-Wunsequenced]
    cout << "++j " << ++j << " j " << j << endl;
                      ^               ~
1 warning generated.

在这种情况下,这意味着什么?唯一的blog post I found并没有那么有用,因为我无法想象以某种方式重新排序输出。 这种重新排序的输出会是什么样的?

这里也有几个类似的问题。我找到的关于这个主题的唯一好问题是one。但我不明白这将如何在上面创建编译器警告。

使用gcc 4.9编译上面的代码(启用标志-std = c ++ 11)根本没有显示此警告。

0 个答案:

没有答案