Note
Access to this page requires authorization. You can try signing in or changing directories.
Access to this page requires authorization. You can try changing directories.
A logical operator was used with integer values or a bitwise operator was used with Boolean values.
While the flagged code still compiles, it's considered bad practice to use operators incorrectly: it makes the code harder to read or modify, and may cause runtime errors.
The lnt-logical-bitwise-mismatch
check is controlled by the Logical/Bitwise Mismatch setting in the C/C++ Code Style options. For information on how to change this setting, see Configure the linter.
Examples
Only use logical operators on Boolean values.
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.
}
Only use bitwise operators on integer values.
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.
}
How to fix the issue
The fix the linter suggests is to use the correct operator for the operand type.
Known issues
Alternative tokens such as and
or bitor
are flagged by the check, but the suggested fix is incorrect.