gpt4 book ai didi

c++ - 警告 : second/third operand of conditional has no effect [-Wunused-value]

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:13:39 25 4
gpt4 key购买 nike

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 precedenceoperator&& .

只有abs(b - c) < a的值将被打印并且 (a < b + c ? 1 : 0)部分将与 std::ostream::operator bool 的返回值一起进行 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);

关于c++ - 警告 : second/third operand of conditional has no effect [-Wunused-value],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35685338/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com