AUTOSAR C++ 14 правил M5-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).

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

Группа: Выражения

Введенный в R2019a