为什么C++ 11将运算符bool添加到ios类中

Joh*_* Li 3 c++ iostream c++11

在C++ 98中,ios类中有一个公共函数定义为

operator void*() const;
Run Code Online (Sandbox Code Playgroud)

operator bool在C++ 11中将An 添加到类中,即

explicit operator bool() const;
Run Code Online (Sandbox Code Playgroud)

从阅读参考文献来看,我不清楚为什么这operator bool是必要的.

任何人都可以给出一个operator void*导致问题的例子,同时operator bool工作得很好吗?

Mot*_*tti 5

在C++ 98中没有explicit强制转换操作符,所以如果你有一个operator bool它意味着该对象可以被用作一个bool或任何可以从中投射的东西bool(例如int)这意味着你可能会意外地以你想要的方式使用你的对象不期望或想要(例如obj + 2).一些对象提供了一个强制转换void*,意味着该对象可以在一个if语句中测试(不是null)但是不能传递给期望的函数int等.

随着explicit铸造操作员的引入,不再需要这样做,并且为了拥有可测试的物体,使用它explicit operator bool比使用更好operator void*.