带标准输出的运算符 ++ 在 C/C++ 中给出意外结果

Operator ++ with stdout giving unexpected result in C/C++

在学校学习C++的时候,当我们学习C++中的运算符++时,我们知道++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 来阅读。所以希望有人能找到原因或解决办法。

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