Def*_*ult 8 c++ iostream operators filestream operator-precedence
在回答这个问题时,我做了一些让我感到困惑的研究.
我注意到两个成功打开的ifstream不相等,但两个ifstreams失败了.起初我查了cplusplus.com.在operator !返回badbit和failbit的状态.我认为与此相反的仍然是返回这两位的状态,但翻转.
所以,我认为这是一个operator bool可以返回某些东西的地方.所以我试图从ifstream回溯并找到了istream::operator bool(),它正在返回_Ok.
所以我改变了我的方法,并从Visual Studio中检查了反汇编.我发现了什么?
if (file0 != file1) {不打电话给operator bool(),而是operator void* ()打电话给(或真的__imp_std::ios_base::operator void *).
所以我的问题是......
operator bool ()在尝试将其转换为指针值之前,是否应该调用任何内容?operator bool()我错过了反过来打电话给operator void*?这是一些我不理解的优化吗?
或者我完全错了,因为C++ 实际上认为这void*是比bool这个比较更好的匹配?