qdi*_*dii 3 c++ boolean void-pointers
在讨论流时,Horstmann的C++陷阱解决了一个有趣的问题.引用他:
使用转换
void*,而不是转换为int或bool实现产生真值的对象.与int或不同bool,void*除了==比较之外没有任何合法的操作.
作为一名程序员,如果void*我期待一个布尔值,我会感到困惑.Horstmann提供了一个使用a void*而不是a bool似乎合适的例子.总是可取的吗?
tem*_*def 10
在一般情况下不建议这样做,并且根本不建议使用C++ 11.
转换的原因void*是支持语法
std::ifstream myStream;
if (myStream) {
}
if (!myStream) {
}
Run Code Online (Sandbox Code Playgroud)
在这里,转换bool似乎更合理,但会导致像这样的奇怪:
if (myStream == true) // ??
Run Code Online (Sandbox Code Playgroud)
转换以void*防止此代码合法,但打开了另外一堆蠕虫,如
delete myStream; // ??
Run Code Online (Sandbox Code Playgroud)
在C++ 11中,具有explicit operator bool()作为成员函数的能力,这个void*hack已被弃用,不应该被使用.不要用这个成语.如果你需要返回一个东西bool,请让它返回bool.如果您需要一个可以转换为a的对象bool,请使用explicit operator bool.
希望这可以帮助!