warning: suggest parentheses around '&&' within错误解析
时间:2014-07-24 09:42 来源: 我爱IT技术网 作者:山风
我们先来看一段代码:
- bool isLeap(int year){
- if (year % 400 == 0 || year % 4 == 0 && year % 100 != 0)
- return true;
- else
- return false;
- }
以上程序如果用g++ -Wall来编译的话会在if判断式那行产生下列的warning
warning: suggest parentheses around ‘&&’ within ‘||’
看到这个warning可能会想说是没有括上括号,我们整理一下上面的判断式
- if (((year % 100) != 0) || ((year % 400) == 0) && ((year % 4) == 0))
奇怪,怎么改成这样还会有warning?
原来原因是发生在&&和||混合使用,但是没有加上括号表示其运算的先后顺序

由上表可以知道&&的运算优先顺序是比||来的高
闰年的判断式compiler其实是后面的((year % 400) == 0) && ((year % 4) == 0)会先算
而不是(year % 100) != 0) || ((year % 400) == 0)先算,从左到右计算
虽然结果一样,但是运算的先后顺序不一样
最好的方法当然是加上括号,这样就不会造成误会了
在此例,正确的逻辑应该要改成这样。
- 评论列表(网友评论仅供网友表达个人看法,并不表明本站同意其观点或证实其描述)
-
