这是我正在努力解决的代码
#include <iostream>
#include <string>
using namespace std;
int main() {
int a{ 6 }, b{ 9 };
cout << !(a < 5) && !(b >= 7);
}
Run Code Online (Sandbox Code Playgroud)
每次我运行这段代码时,它都会输出 1。为什么它不输出 0?
您已经被我们在 C++ 中为运算符提供的语义重载所困扰<<。
该运算符来自 C,专门用于对整数进行位移位。
因此,它的优先级低于运算符&&。C++ 使用运算符<<进行流插入并没有改变这一点。将会<<在 之前进行评估&&。
因此
cout << !(a < 5) && !(b >= 7);
Run Code Online (Sandbox Code Playgroud)
首先将!(a<5)(true, since a==6) 插入流中,打印1. 然后它评估该值的返回值(对 的引用cout),将其转换为布尔值,然后评估&&(本质上是(!cout.fail() && !(b>=7))),丢弃结果。
您需要更多括号:
cout << (!(a < 5) && !(b >= 7));
Run Code Online (Sandbox Code Playgroud)
然而,
cout << (a>=5 && b < 7);
Run Code Online (Sandbox Code Playgroud)
会更清楚。