gpt4 book ai didi

c++ - 运算符优先级(bool 之前是否为 void*?)

转载 作者:可可西里 更新时间:2023-11-01 17:59:01 25 4
gpt4 key购买 nike

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

我注意到两个成功打开的 ifstreams 不相等,但两个失败的 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 更匹配?

最佳答案

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

关于c++ - 运算符优先级(bool 之前是否为 void*?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4294813/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com