警告:条件的第二个/第三个操作数无效[-Wunused-value]

时间:2016-02-28 16:48:14

标签: c++ gcc operator-precedence

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]

出了什么问题?

1 个答案:

答案 0 :(得分:9)

您的代码转换为:

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

首先, operator<<的{​​{3}}高于operator&&

仅打印abs(b - c) < a的值,(a < b + c ? 1 : 0)部分将与operator precedence的返回值一起进行AND编辑。

但是警告是关于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));

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

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