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


lnt-logical-bitwise-mismatch

Логический оператор использовался с целочисленными значениями или побитовый оператор использовался с логическими значениями.

Хотя помеченный код по-прежнему компилируется, не рекомендуется использовать операторы таким образом — это усложняет чтение или изменение кода и может вызвать ошибки во время выполнения.

Проверка 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, помечаются проверкой, но предлагаемое исправление является неверным.

См. также

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