使用`?:`在输出流中

using `?:` in the output stream

本文关键字:输出流 使用      更新时间:2023-10-16

我想在输出流中集成?:运算符。这是代码

bool a;
for (int i = 0; i < 10; i++ ) {
  a = rand() % 2;
  std::cout << "a= " << (a) ? "truen" : "falsen";
}

但是输出是

a= 1a= 0a= 1a= 1a= 1a= 1a= 0a= 0a= 1a= 1

问题是,没有新行字符串。我该怎么办?

这是因为输出运算符<<的优先级高于三元运算符?:。所以对于编译器来说,它和是一样的

(std::cout << "a= " << (a)) ? "truen" : "falsen";

您需要明确地将括号放在正确的位置:

std::cout << "a= " << (a ? "truen" : "falsen");

或者,由于a已经是bool,您可以使用std::boolalpha直接打印:

std::cout << "a= " << std::boolalpha << a << 'n';

您需要使用一些括号来覆盖默认的优先级规则:

std::cout << "a= " << ((a) ? "truen" : "falsen");