operator Vorrang (void * vor bool?)

8

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.

  • Falsch , weil zwei erfolgreiche Anrufe nicht gleich sind.

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.

  • Immer noch falsch , dies scheint jedoch überhaupt nicht aufgerufen zu werden (und konnte nicht sein, da die beiden erfolgreichen Aufrufe immer noch nicht gleich sind).

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 ..

  • Sollte operator bool () nicht gefunden werden, bevor versucht wird, es in Zeigerwerte umzuwandeln?
  • Ist es eine 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 ?

Default 28.11.2010, 01:10
quelle

1 Antwort

2

1.) Sie können nicht mehrere Male überladen, sondern mit unterschiedlichen Rückgabetypen. 2.) Ja, operator! gibt das Badbit / Failbit zurück, aber operator! ist etwas völlig anderes als operator!= , welches das ist, das Sie verwenden.

    
Lagerbaer 28.11.2010, 01:14
quelle