运算符优先级(bool之前的void*)

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这个比较更好的匹配?

Lag*_*aer 2

1.) 不能多次重载但返回类型不同。2.) 是的,operator!返回 badbit/failbit,但与您正在使用的operator!完全不同。operator!=