readability-simplify-boolean-expr¶
查找包含布尔常量的布尔表达式,并将它们简化为直接使用相应的布尔表达式。 通过应用 DeMorgan 定理来简化布尔表达式。
示例
初始表达式 |
结果 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
- 生成的表达式
e如下修改 表达式周围不必要的括号被删除。
消除
!的否定应用。将比较运算符的否定应用更改为使用相反的条件。
在 C++11 中,指针(包括指向成员的指针)到
bool的隐式转换被替换为与nullptr的显式比较;在 C++98/03 中,则替换为与NULL的显式比较。将隐式转换为
bool替换为显式转换为bool。具有
explicit operator bool转换运算符的对象表达式被替换为显式转换为bool。将整数类型隐式转换为
bool替换为与0的显式比较。
- 示例
三元赋值
bool b = (i < 0) ? true : false;包含多余的括号,并变为bool b = i < 0;。条件返回
if (!b) return false; return true;包含隐含的双重否定,并变为return b;。条件返回
if (i < 0) return false; return true;变为return i >= 0;。条件返回
if (i != 0) return false; return true;变为return i == 0;。条件返回
if (p) return true; return false;包含指针到bool的隐式转换,并变为return p != nullptr;。三元赋值
bool b = (i & 1) ? true : false;包含i & 1到bool的隐式转换,并变为bool b = (i & 1) != 0;。条件返回
if (i & 1) return true; else return false;包含整数数量i & 1到bool的隐式转换,并变为return (i & 1) != 0;给定
struct X { explicit operator bool(); };和struct X的一个实例x,条件返回if (x) return true; return false;变为return static_cast<bool>(x);
选项¶
- IgnoreMacros¶
如果为 true,则忽略源自展开宏的布尔表达式。 默认值为 false。
- ChainedConditionalReturn¶
如果为 true,则
if/else if链末尾的条件布尔返回语句将被转换。 默认值为 false。
- ChainedConditionalAssignment¶
如果为 true,则
if/else if链末尾的条件布尔赋值语句将被转换。 默认值为 false。
- SimplifyDeMorgan¶
如果为 true,则将应用 DeMorgan 定理来简化否定的合取和析取。 默认值为 true。
- SimplifyDeMorganRelaxed¶
如果为 true,则
SimplifyDeMorgan还将转换否定的合取和析取,其中任一操作数都没有否定。 如果SimplifyDeMorgan为 false,则此选项无效。 默认值为 false。启用时
bool X = !(A && B) bool Y = !(A || B)
将被转换为
bool X = !A || !B bool Y = !A && !B