在C++中用cout递增和递减

Ali*_*Osm 3 c++ cout increment decrement

我是C++的新手,研究增量和减量运算符.所以我尝试了这个例子:

    int x = 4;    
    cout << ++x << "    " << x++ << "    " << x++ << endl << endl;
    cout << x << endl;
Run Code Online (Sandbox Code Playgroud)

它在C++ .NET和QtCreator以及5个在线C++编译器上返回这个奇怪的输出:

7    5    4

7
Run Code Online (Sandbox Code Playgroud)

奇怪的是,我希望是这样的:

5    5    6

7
Run Code Online (Sandbox Code Playgroud)

你能解释一下会发生什么吗

oo_*_*uel 13

请注意,这cout << x++ << ++x;只是另一种表示法:

operator<<( operator<< (cout, x++), ++x);
Run Code Online (Sandbox Code Playgroud)

订单中,你的X ++++ X语句进行评估,是不确定的,所以是你的代码的效果.

即使它似乎从就在你的具体的例子向左发生,你应该以任何方式依赖于这一点.

只需使用多个语句进行另一个实验:

cout << ++x << " ";
cout << x++ << " ";
cout << x++ << endl;
Run Code Online (Sandbox Code Playgroud)

您的问题的解决方案是:

永远不要编写导致未定义行为的代码!:)

  • @AliOsm了解编译器对未指定代码的作用是虚假经济.这可能很有趣,但知识几乎一文不值,因为你不能指望它保持不变.你的编译器可以给一个号码,你的邻居给另一个号码,你的叔叔鲍勃可能得到第三个号码.编译器可以完全按照自己的意愿行事. (3认同)