我有一个同事,通常在条件句中对布尔进行显式转换,例如:
SomeType *ptr = /* some value */;
if (static_cast<bool>(ptr)) {
// do something
}
但是我无法找到这种冗长的理由。有什么想法吗?
编辑:同事说这是关于清楚和明确,但我认为这种解释没有什么吸引力。我在这里提出问题,以查看其他C ++专家是否建议这样做,如果这样,也许会出现更引人注目的论点。
[if (static_cast<bool>(ptr))
完全等同于if (ptr)
。
广义上讲,没有客观的充分理由这样做。对于指针,它实际上是不利的。指针到bool
的转换是C ++中定义明确的操作,自C时代以来(可能还有更早)。这是每个C ++程序员需要学习
[自C ++ 11起,您已经能够指定explicit bool
转换,仅当在if (myObj) { … }
等情况下使用,而在bool b = myObj;
等情况下使用时才触发。这些语句是等效的,但是您的同事可能一直试图仅通过语法提供转换的“显式”性质。总而言之,您不需要static_cast<bool>(myObj)
,并且在C ++ 11之后,您已经提供了类型安全性。