我最近想要更好地了解++ 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)根本没有显示此警告。