警告: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 值进行与运算。
但是警告是关于 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);
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 值进行与运算。
但是警告是关于 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);