其他分享
首页 > 其他分享> > c – 警告:条件的第二个/第三个操作数无效[-Wunused-value]

c – 警告:条件的第二个/第三个操作数无效[-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 precedence.

只有abs(b – c)的值<将打印a并将(a< b c?1:0)部分与返回值std::ostream::operator bool进行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<< with bool而另一个调用int),不需要三元运算符:

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

标签:c,gcc,operator-precedence
来源: https://codeday.me/bug/20190724/1525699.html