在回答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
更匹配?
答案 0 :(得分:2)
1。)您不能多次重载但具有不同的返回类型。
2.)是的,operator!
会返回badbit / failbit,但operator!
与您正在使用的operator!=
完全不同。