gpt4 book ai didi

c++ - 为什么在这种情况下类型 bool 的输出等于 0?

转载 作者:行者123 更新时间:2023-12-01 14:04:20 24 4
gpt4 key购买 nike

#include <iostream>
#include <cmath>
using namespace std;

int
main ()
{
cout << ('x' > 0xFF) || (3 * 5 < 35) && (53 > 5 * 3);
cout << ('x' > 0xFF);
cout << (3 * 5 < 35) && (53 > 5 * 3);
return 0;
}
我得到 001 即使据我所知它应该是 101 。

最佳答案

根据 C++ operator precedence , <<具有比 || 更高的优先级和 && .所以

cout << ('x' > 0xFF) || (3 * 5 < 35) && (53 > 5 * 3);
实际上被解析为(为了强调而添加了额外的空格)
( cout << ('x' > 0xFF) )    || (3 * 5 < 35) && (53 > 5 * 3);
它正在打印 'x' > 0xFF 的结果(这是错误的)并且基本上忽略了其余部分。为了得到你想要的东西,你需要把它用括号括起来:
cout <<    ( ('x' > 0xFF) || (3 * 5 < 35) && (53 > 5 * 3) );
至于为什么 (cout << A) || B首先有效, std::basic_ostream (其中 cout 是一个实例)具有以下重载:
  • operator<< - 将数据写入流并返回对流的引用(这使您可以将多个调用链接在一起)。
  • operator bool - 返回流是否仍然有效。

  • 所以 (cout << A) || Bstatic_cast<bool>(cout.operator<<(A)) || B 的语法糖

    关于c++ - 为什么在这种情况下类型 bool 的输出等于 0?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62598610/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com