C ++ предупреждение: предложить скобки вокруг арифметики в операнде | - PullRequest
9 голосов
/ 04 июня 2010

У меня есть код вроде

A = B|C|D|E;

Вывод предупреждения «предложить круглые скобки вокруг арифметики в операнде |»

Ожидая, что выражение нуждается в высоком приоритете для операторов, пробовал следующие способы:

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

еще один как:

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

Все еще остается то же предупреждение.

Пожалуйста, помогите мне решить эту проблему.

Спасибо, Sujatha

B, C, D - перечисления, а E - целое число.

Ответы [ 2 ]

12 голосов
/ 04 июня 2010

В вашем выражении есть какой-то арифметический оператор, который на самом деле не просто B, или не совсем C, и т. Д. Компилятор предлагает заключить в скобки любое выражение, чтобы читатели увидели, что вы написали то, что имели в виду. , Если вы не заключите в скобки, все должны точно помнить, каковы приоритеты, и они должны выяснить, вспомнили ли вы, когда писали это.

Попробуйте это: (B) | (C) | (D) | (E).

2 голосов
/ 04 июня 2010

Это странное предупреждение. Вам действительно нужно обращать внимание на приоритет, когда вы используете разные операторы, и эти операторы имеют разные приоритеты. Например, в арифметическом умножение имеет более высокий приоритет, чем сложение.

Но в этом случае вы используете только один оператор несколько раз. Побитовый или является ассоциативным и коммутативным ((A | B) | C == A | (B | C) и A | B == B | A), поэтому на самом деле нет причин для предупреждения.

...