Поделиться через


lnt-comparison-bitwise-precedence

Оператор сравнения имеет более высокий приоритет, чем битовый оператор.

Оператор сравнения будет обработан первым. Результат будет неявно приведен к целому числу и использован в качестве операнда в битовой операции. Чтобы принудительно задать ожидаемый порядок операций, используйте круглые скобки.

Проверка lnt-comparison-bitwise-precedence контролируется настройкой Приоритет сравнения и битового оператора в параметрах стиля кода C/C++. Сведения о том, как изменить этот параметр, см. в разделе Настройка анализатора кода.

Примеры

bool is_flag_set(unsigned value, unsigned flag)
{
    return value & flag == flag;  // Flagged: `flag == flag` is evaluated first.
                                  // Then `value & (int)true` is evaluated which
                                  // returns an incorrect result in most cases.
}

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

bool is_flag_set(unsigned value, unsigned flag)
{
    return (value & flag) == flag;  // Correct
}

Устранение проблемы

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

См. также

Обзор анализатора кода IntelliSense для C++