readability-simplify-boolean-expr¶
Looks for boolean expressions involving boolean constants and simplifies them to use the appropriate boolean expression directly. Simplifies boolean expressions by application of DeMorgan’s Theorem.
Examples:
Initial expression |
Result |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
- The resulting expression
eis modified as follows: Unnecessary parentheses around the expression are removed.
Negated applications of
!are eliminated.Negated applications of comparison operators are changed to use the opposite condition.
Implicit conversions of pointers, including pointers to members, to
boolare replaced with explicit comparisons tonullptrin C++11 orNULLin C++98/03.Implicit casts to
boolare replaced with explicit casts tobool.Object expressions with
explicit operator boolconversion operators are replaced with explicit casts tobool.Implicit conversions of integral types to
boolare replaced with explicit comparisons to0.
- Examples:
The ternary assignment
bool b = (i < 0) ? true : false;has redundant parentheses and becomesbool b = i < 0;.The conditional return
if (!b) return false; return true;has an implied double negation and becomesreturn b;.The conditional return
if (i < 0) return false; return true;becomesreturn i >= 0;.The conditional return
if (i != 0) return false; return true;becomesreturn i == 0;.The conditional return
if (p) return true; return false;has an implicit conversion of a pointer tobooland becomesreturn p != nullptr;.The ternary assignment
bool b = (i & 1) ? true : false;has an implicit conversion ofi & 1tobooland becomesbool b = (i & 1) != 0;.The conditional return
if (i & 1) return true; else return false;has an implicit conversion of an integer quantityi & 1tobooland becomesreturn (i & 1) != 0;Given
struct X { explicit operator bool(); };, and an instancexofstruct X, the conditional returnif (x) return true; return false;becomesreturn static_cast<bool>(x);
Options¶
- IgnoreMacros¶
If true, ignore boolean expressions originating from expanded macros. Default is false.
- ChainedConditionalReturn¶
If true, conditional boolean return statements at the end of an
if/else ifchain will be transformed. Default is false.
- ChainedConditionalAssignment¶
If true, conditional boolean assignments at the end of an
if/else ifchain will be transformed. Default is false.
- SimplifyDeMorgan¶
If true, DeMorgan’s Theorem will be applied to simplify negated conjunctions and disjunctions. Default is true.
- SimplifyDeMorganRelaxed¶
If true,
SimplifyDeMorganwill also transform negated conjunctions and disjunctions where there is no negation on either operand. This option has no effect ifSimplifyDeMorganis false. Default is false.When Enabled:
bool X = !(A && B) bool Y = !(A || B)
Would be transformed to:
bool X = !A || !B bool Y = !A && !B