在学校的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。希望有人能找到理由或解决方案。
答案 0 :(得分:1)
代码int r = ++ c ^ c ++;是未定义的行为,不应该使用,永远不会。您不能在序列点之前修改变量两次。