警告:条件的第二个/第三个操作数不起作用 [-Wunused-value]

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

本文关键字:操作数 三个 不起作用 -Wunused-value 条件 第二个 警告      更新时间:2023-10-16
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&&

仅打印 abs(b - c) < a 的值,并且(a < b + c ? 1 : 0)部分将与返回值 std::ostream::operator bool 一起进行 AND-ed。

但是警告是关于1的,0没有分配给任何东西,也没有任何副作用,因为&&先于三元条件(?:)。


正确的代码是:

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);
相关文章: