带有stdout的Operator ++在C / C ++中产生意外结果

时间:2015-09-24 16:00:41

标签: c++ stdout iostream

在学校的C ++学习期间,当我们在C ++中学习operator ++时,我们知道++ c和c ++是不同的。
当我们用这种代码测试更多相关信息时:

#include <iostream>

using namespace std;

int main(){
    int c=10;
    cout<<++c<<" "<<c++<<endl;
    return 0;
}

为什么上面的代码在C ++中输出了12和10? 计算机(我们用cout和printf测试,我们也试过VC ++和g ++)给我这个:

12 10

“cout”和“printf”都给出了相同的结果 但是当我们在计算中进行测试时,结果是可以的。

#include <iostream>

using namespace std;

int main(){
    int c=10;
    int r=++c^c++;
    cout<<r<<endl;
    return 0;
}

上面的源代码给了我0这意味着当执行XOR操作时,左手边(++ c)和右手边(c ++)给XOR运算符赋予相同的值11(我们得到值11用11替换c ++和计算机给出相同的结果0)
这真的很有线。有没有人注意到这一点?
顺便说一句,我们在Windows和Lubuntu中都在调试模式和发布模式下进行测试。所以我们认为这与标准库有关。但我们并不期望我们可以将stdlib读作NOOB。希望有人能找到理由或解决方案。

1 个答案:

答案 0 :(得分:1)

代码int r = ++ c ^ c ++;是未定义的行为,不应该使用,永远不会。您不能在序列点之前修改变量两次。