代码之家  ›  专栏  ›  技术社区  ›  default

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

  •  8
  • default  · 技术社区  · 14 年前

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

    我注意到两个成功打开的ifstream并不相等,但两个失败的ifstream是相等的。 一开始我查看了cpluplus.com。这个 operator ! 返回错误位和故障位的状态。我认为与此相反的仍然是返回这两个位的状态,但翻转了。

    • 错的 ,因为两个成功的调用不相等。

    所以我想是 operator bool 会有回报的地方。所以我试着从ifstream返回找到 istream::operator bool() ,它正在返回 _Ok .

    • 但还是错了 ,这似乎根本没有调用(也不可能调用,因为两个成功的调用仍然不相等)。

    所以我改变了我的方法并检查了Visual Studio中的反汇编。我发现了什么?
    if (file0 != file1) { 不打电话给 operator bool() , 而是 operator void* () (或者真的 __imp_std::ios_base::operator void * ).

    所以我的问题是。。

    • 不应该有 operator bool () 在尝试将其转换为指针值之前调用了found?
    • 是一些吗 运算符bool() 我错过了依次是 operator void* ?
    • 这是我不明白的优化吗?

    • 或者在C++中我完全错了 实际上认为 那个 void* bool 在这个比较中?

    1 回复  |  直到 8 年前
        1
  •  2
  •   cadolphs    14 年前

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