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