if(static_cast [x))vs if(x)

问题描述 投票:3回答:3

我有一个同事,通常在条件句中对布尔进行显式转换,例如:

SomeType *ptr = /* some value */;
if (static_cast<bool>(ptr)) {
    // do something
}

但是我无法找到这种冗长的理由。有什么想法吗?

编辑:同事说这是关于清楚和明确,但我认为这种解释没有什么吸引力。我在这里提出问题,以查看其他C ++专家是否建议这样做,如果这样,也许会出现更引人注目的论点。

c++ casting conditional-statements implicit-conversion explicit-conversion
3个回答
1
投票

[if (static_cast<bool>(ptr))完全等同于if (ptr)


1
投票

广义上讲,没有客观的充分理由这样做。对于指针,它实际上是不利的。指针到bool的转换是C ++中定义明确的操作,自C时代以来(可能还有更早)。这是每个C ++程序员需要学习


0
投票

[自C ++ 11起,您已经能够指定explicit bool转换,仅当在if (myObj) { … }等情况下使用,而在bool b = myObj;等情况下使用时才触发。这些语句是等效的,但是您的同事可能一直试图仅通过语法提供转换的“显式”性质。总而言之,您不需要static_cast<bool>(myObj),并且在C ++ 11之后,您已经提供了类型安全性。

© www.soinside.com 2019 - 2024. All rights reserved.