警告:second/third 条件操作数无效 [-Wunused-value]

Warning: second/third operand of conditional has no effect [-Wunused-value]

std::cout << (abs(b - c) < a) && a < b + c ? 1 : 0;

我想检查给定值是否可以创建三角形。我收到警告:

second operand of conditional expression has no effect [-Wunused-value]
third operand of conditional expression has no effect [-Wunused-value]

怎么了?

您的代码转换为:

((std::cout << (abs(b - c) < a)) && a < b + c) ? 1 : 0;

首先,operator<<operator precedence 高于 operator&&

只会打印 abs(b - c) < a 的值,(a < b + c ? 1 : 0) 部分将与 std::ostream::operator bool 的 return 值进行与运算。

但是警告是关于 10 没有被分配给任何东西也没有任何副作用,因为 && 在三元条件之前(?:).


正确的代码是:

std::cout << (abs(b - c) < a && a < b + c ? 1 : 0);
// same as std::cout << ((abs(b - c) < a && a < b + c) ? 1 : 0);

std::cout << (abs(b - c) < a && (a < b + c ? 1 : 0));

事实上,它们是等价的(除了一个用 bool 调用 operator<< 而另一个用 int 调用),不需要三元运算符:

std::cout << (abs(b - c) < a && a < b + c);