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 to- nullptrin C++11 or- NULLin C++98/03.
- Implicit casts to - boolare replaced with explicit casts to- bool.
- Object expressions with - explicit operator boolconversion operators are replaced with explicit casts to- bool.
- Implicit conversions of integral types to - boolare replaced with explicit comparisons to- 0.
 
- Examples:
- The ternary assignment - bool b = (i < 0) ? true : false;has redundant parentheses and becomes- bool b = i < 0;.
- The conditional return - if (!b) return false; return true;has an implied double negation and becomes- return b;.
- The conditional return - if (i < 0) return false; return true;becomes- return i >= 0;.- The conditional return - if (i != 0) return false; return true;becomes- return i == 0;.
- The conditional return - if (p) return true; return false;has an implicit conversion of a pointer to- booland becomes- return p != nullptr;.- The ternary assignment - bool b = (i & 1) ? true : false;has an implicit conversion of- i & 1to- booland becomes- bool b = (i & 1) != 0;.
- The conditional return - if (i & 1) return true; else return false;has an implicit conversion of an integer quantity- i & 1to- booland becomes- return (i & 1) != 0;
- Given - struct X { explicit operator bool(); };, and an instance- xof- struct X, the conditional return- if (x) return true; return false;becomes- return static_cast<bool>(x);
 
Options¶
- 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 if- SimplifyDeMorganis 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