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
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。