使用void *而不是bool是一种可行的做法吗?

时间:2012-02-03 20:12:46

标签: c++ boolean void-pointers

在讨论流时,

Horstmann’s C++ pitfalls解决了一个有趣的问题。引用他:

  

使用转化为void*,而非转换为intbool,以实现产生真值的对象。与intbool不同,void*==比较外没有合法操作。

作为一名程序员,当我期望一个布尔值时,如果某个函数返回void*,我会感到困惑。 Horstmann提供了一个示例,其中使用void*而不是bool似乎是合适的。总是可取的吗?

1 个答案:

答案 0 :(得分:10)

在一般情况下不建议这样做,并且根本不建议使用C ++ 11。

转换为void*的原因是支持

之类的语法
std::ifstream myStream;
if (myStream) {

}
if (!myStream) {

}

在这里,转换为bool似乎更合理,但会导致像这样的奇怪:

if (myStream == true) // ??

转换为void*会阻止此代码合法,但会打开其他一堆蠕虫,例如

delete myStream; // ??

在C ++ 11中,能够将explicit operator bool()作为成员函数,不推荐使用void* hack,不应该使用它。不要用这个成语。如果您需要返回bool的内容,请返回bool。如果您需要可以转换为bool的对象,请使用explicit operator bool

希望这有帮助!