Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Логический оператор использовался с целочисленными значениями или побитовый оператор использовался с логическими значениями.
Хотя помеченный код по-прежнему компилируется, не рекомендуется использовать операторы таким образом — это усложняет чтение или изменение кода и может вызвать ошибки во время выполнения.
Проверка lnt-logical-bitwise-mismatch
контролируется настройкой Несоответствие логического/побитового оператора в параметрах стиля кода C/C++. Сведения о том, как изменить этот параметр, см. в разделе Настройка анализатора кода.
Примеры
Используйте логические операторы только с логическими значениями.
void example(bool a, bool b) {
bool c = a & b; // Flagged: Bitwise AND operator used with Boolean variables.
bool d = a || b; // OK: Logical OR operator used with Boolean variables.
}
Используйте побитовые операторы только с целочисленными значениями.
void example(int i, int j) {
int k = i && j; // Flagged: Logical AND operator used with integer variables.
// The runtime behavior will be incorrect in almost all cases.
bool l = i ^ j; // OK: Bitwise XOR operator used with integer variables.
}
Устранение проблемы
Исправление, предлагаемое анализатором кода, — использовать оператор в соответствии с типом операнда.
Известные проблемы
Альтернативные токены, такие как and
или bitor
, помечаются проверкой, но предлагаемое исправление является неверным.