Als ich diese Frage beantwortete habe ich einige Nachforschungen angestellt, die mich wirklich verwirren.
Ich habe festgestellt, dass zwei erfolgreich geöffnete ifstreams nicht gleich sind, aber zwei ifstreams, die fehlschlagen.
Zuerst habe ich cplusplus.com überprüft. Die operator !
gibt den Status von badbit und failbit zurück. Ich denke, das Gegenteil davon wäre immer noch, den Status dieser beiden Bits zurückzugeben, aber umgedreht.
Also dachte ich, es wäre irgendwo ein operator bool
, das etwas zurückgeben würde. Also habe ich versucht, von ifstream zurückzukommen und das istream::operator bool()
gefunden, welches _Ok
zurückgibt.
Also habe ich meinen Ansatz geändert und die Disassemblierung von Visual Studio überprüft. Und was finde ich?
if (file0 != file1) {
nennt nicht operator bool()
, sondern eher operator void* ()
(oder wirklich __imp_std::ios_base::operator void *
).
Also sind die Fragen, die ich habe ..
operator bool ()
nicht gefunden werden, bevor versucht wird, es in Zeigerwerte umzuwandeln? operator bool()
die ich verpasst habe, die wiederum operator void*
aufruft? Ist das eine Optimierung, die ich nicht verstehe?
Oder liege ich völlig falsch darin, dass C ++ tatsächlich denkt, dass void*
in diesem Vergleich besser ist als bool
?
Tags und Links c++ iostream filestream operators operator-precedence