警告:条件的第二个/第三个操作数不起作用 [-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&&
。
仅打印 abs(b - c) < a
的值,并且(a < b + c ? 1 : 0)
部分将与返回值 std::ostream::operator bool
一起进行 AND-ed。
但是警告是关于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);
相关文章:
- 模板-模板参数推导:三个不同的编译器三种不同的行为
- 在 2D 向量中使用第三个 [ ] 有什么意义?
- 如何通过按下第三个窗口中的按钮,将QString从一个窗口获取到另一个窗口
- 如何知道n!是否可以表示为三个连续数字的乘法?
- 我有三个 getline,但是一旦编译,输入就太多了
- 我遇到了黑客排名中的问题"TWO STRINGS"的三个测试用例的分段错误。原因是什么?
- 有没有更好的方法对C++中的三个整数进行排序?
- 如何检查第三个 API 是否在 Linux 中为 c/c++ 程序创建了一个新线程?
- 为什么 getch 在按下函数或箭头键时返回三个值?
- 使用三个数字比较器进行排序
- 我想在C++代码中比较这三个术语
- 我的动态链接队列在同一输出流中调用时不正确地输出三个返回函数
- 我该如何编码,使计算机知道两个名称条目和三个名称条目之间的区别
- 为什么我需要三个嵌套的大括号来调用赋值运算符,将const引用到二维数组
- 如何通过通用引用或std::forward将这三个c++模板函数合并为一个
- 首先处理第二个和第三个堆与第一个和第二个堆之间的逻辑差异
- 对条件表达式结果的赋值(其中第二个和第三个操作数是相同类型和值类别的变量)是否仍然存在?
- 警告:条件的第二个/第三个操作数不起作用 [-Wunused-value]
- 为什么在条件运算符(?:)中,第二个和第三个操作数必须具有相同的类型
- 我可以在三元运算符的第二个或第三个操作数中使用多个指令吗?