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

时间:2010-11-28 01:10:10

标签: c++ operators filestream iostream operator-precedence

在回答this question时,我做了一些让我感到困惑的研究。

我注意到两个成功打开的ifstream不相等,但两个失败的ifstream是。 起初我查了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更匹配?

1 个答案:

答案 0 :(得分:2)

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