exponenta event banner

Правило 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