readability-simplify-boolean-expr
Looks for boolean expressions involving boolean constants and simplifies them to use the appropriate boolean expression directly.
Examples:
Initial expression | Result |
if (b == true) |
if (b) |
if (b == false) |
if (!b) |
if (b && true) |
if (b) |
if (b && false) |
if (false) |
if (b || true) |
if (true) |
if (b || false) |
if (b) |
e ? true : false |
e |
e ? false : true |
!e |
if (true) t(); else f(); |
t(); |
if (false) t(); else f(); |
f(); |
if (e) return true; else return false; |
return e; |
if (e) return false; else return true; |
return !e; |
if (e) b = true; else b = false; |
b = e; |
if (e) b = false; else b = true; |
b = !e; |
if (e) return true; return false; |
return e; |
if (e) return false; return true; |
return !e; |
- The resulting expression
e
is 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
bool
are replaced with explicit comparisons tonullptr
in C++11 orNULL
in C++98/03. - Implicit casts to
bool
are replaced with explicit casts tobool
. - Object expressions with
explicit operator bool
conversion operators are replaced with explicit casts tobool
. - Implicit conversions of integral types to
bool
are 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 tobool
and becomesreturn p != nullptr;
.The ternary assignment
bool b = (i & 1) ? true : false;
has an implicit conversion ofi & 1
tobool
and becomesbool b = (i & 1) != 0;
. -
The conditional return
if (i & 1) return true; else return false;
has an implicit conversion of an integer quantityi & 1
tobool
and becomesreturn (i & 1) != 0;
-
Given
struct X { explicit operator bool(); };
, and an instancex
ofstruct X
, the conditional returnif (x) return true; return false;
becomesreturn static_cast<bool>(x);
-