C++, предупреждающий: предложите круглые скобки вокруг арифметики в операнде |

У меня есть код как

A = B|C|D|E;

Бросок предупреждения "предлагает круглые скобки вокруг арифметики в операнде |"

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

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

еще один как:

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

Тем не менее то же предупреждение сохраняется.

Помогите мне в разрешении этого.

Спасибо, Sujatha

B, C, D являются перечислениями, и E является целым числом.

9
задан BalusC 14 October 2011 в 05:14
поделиться

2 ответа

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

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

12
ответ дан 4 December 2019 в 14:26
поделиться

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

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

2
ответ дан 4 December 2019 в 14:26
поделиться
Другие вопросы по тегам:

Похожие вопросы: