C ++警告:在|的操作数中建议围绕算术的括号

时间:2010-06-04 06:45:47

标签: c++ warnings parentheses

我有像

这样的代码
A = B|C|D|E;

抛出警告“在|”

的操作数中围绕算术建议括号

期望表达式需要操作符的高优先级paranthesis,尝试以下方法:

A=(B|C)|(D|E);

另外一个:

A=(((B|C)|D)|E);

仍然存在相同的警告。

请帮我解决这个问题。

谢谢, 萨贾塔

B,C,D是枚举,E是整数。

2 个答案:

答案 0 :(得分:12)

你的表达式中有一些算术运算符,实际上并不是简单的B,或者说它不是简单的C等。编译器建议你将任何表达式括起来,以便读者看到你写的是你的意思。如果你没有括号,每个人都必须准确记住优先级是什么,并且他们必须弄清楚你是否记得你写的时候。

试试这个:(B)|(C)|(D)|(E)。

答案 1 :(得分:2)

这是一个奇怪的警告。当您使用不同的运算符并且这些运算符具有不同的优先级时,您只需要注意优先级。例如,算术乘法的优先级高于加法。

但在这种情况下,您只使用一次运算符多次。按位或者是关联的和可交换的((A | B) | C == A | (B | C)A | B == B | A)因此没有理由发出警告。