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]
出了什么问题?
答案 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编辑。
但是警告是关于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));
事实上,它们相当(除了一个用operator<<
调用bool
而用int
调用另一个),不需要三元运算符:
std::cout << (abs(b - c) < a && a < b + c);