MISRA C++:2008 Rule 5-0-2

Ограниченная зависимость должна быть помещена в правила приоритета оператора C++ в выражениях

Описание

Управляйте определением

Ограниченная зависимость должна быть помещена в правила приоритета оператора C++ в выражениях.

Объяснение

Используйте круглые скобки, чтобы ясно указать на порядок оценки.

В зависимости от оператора приоритет может вызвать следующие проблемы:

  • Если вы или другой рецензент кода рассматриваете код, намеченный порядок оценки не сразу понятен.

  • Возможно, что результат оценки не оправдывает ваши надежды. Например:

    • В операции *p++, возможно, что вы ожидаете, что разыменованное значение будет постепенно увеличено. Однако указатель p постепенно увеличивается перед разыменовыванием.

    • В операции (x == y | z), возможно, что вы ожидаете x быть по сравнению с y | z. Однако == операция происходит перед | операция.

Поиск и устранение проблем

Если вы ожидаете нарушение правила, но не видите его, обратитесь к Кодированию Стандартных Нарушений, Не Отображенных.

Примеры

развернуть все

#include <cstdio>

void showbits(unsigned int x) {
    for(int i = (sizeof(int) * 8) - 1; i >= 0; i--) {
       (x & 1u << i) ? putchar('1') : putchar('0'); // Noncompliant 
    }
    printf("\n");
}

В этом примере средство проверки отмечает операцию x & 1u << i потому что оператор использует правила приоритета оператора для << операция, чтобы произойти перед & операция. Если это - намеченный порядок, операция может быть переписана как x & (1u << i).

Проверяйте информацию

Группа: Выражения
Категория: консультация
Введенный в R2013b