【问题标题】:Operator ++ with stdout giving unexpected result in C/C++ [duplicate]带有标准输出的运算符 ++ 在 C/C++ 中给出了意外的结果 [重复]
【发布时间】:2015-09-24 16:00:41
【问题描述】:

在学校学习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将 c++ 替换为 11 和计算机给出相同的结果 0)。

这真的是有线的。有人注意到了吗?

顺便说一句,我们在 Windows 和 Lubuntu 中都在调试模式和发布模式下进行了测试。所以我们认为这与标准库有关。但是我们并不期望我们可以将 stdlib 作为 NOOB 来阅读。所以希望有人能找到原因或解决方案。

【问题讨论】:

  • 不,这并不奇怪。是的,数百万人注意到了它。
  • 真的吗?那就谢谢你了。

标签: c++ stdout iostream


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2013-04-13
    • 2019-03-06
    • 2016-03-11
    • 1970-01-01
    • 2016-06-27
    • 2022-01-05
    • 2012-11-07
    • 2016-03-29
    • 2013-07-07
    相关资源
    最近更新 更多