Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Оператор сравнения имеет более высокий приоритет, чем битовый оператор.
Оператор сравнения будет обработан первым. Результат будет неявно приведен к целому числу и использован в качестве операнда в битовой операции. Чтобы принудительно задать ожидаемый порядок операций, используйте круглые скобки.
Проверка 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
}
Устранение проблемы
Исправить предложения анализатора кода можно, добавив вокруг битовой операции круглые скобки, чтобы она вычислялась первой.