Horstmann’s C++ pitfalls解决了一个有趣的问题。引用他:
使用转化为
void*
,而非转换为int
或bool
,以实现产生真值的对象。与int
或bool
不同,void*
除==
比较外没有合法操作。
作为一名程序员,当我期望一个布尔值时,如果某个函数返回void*
,我会感到困惑。 Horstmann提供了一个示例,其中使用void*
而不是bool
似乎是合适的。总是可取的吗?
答案 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
。
希望这有帮助!