Christian Seiler: Coding Conventions

Beitrag lesen

Hallo,

Achso, das beim Vergleich boolscher Ausdrücke weiterhin die nicht überladene Variante gilt, hätte ich noch gewusst, trotzdem danke für die Erklärung. Woher kommt dieses Verhalten? Liegt das vielleicht daran, dass erst beide Ausdrücke ausgewertet werden müssen, um herauszubekommen, welche der Überladungen überhaupt benutzt wird?

Nein, das nicht, der Rückgabedatentyp von Funktionen ist ja bekannt. Das Problem ist, wenn Du sowas hast wie bool operator&&(Foo a, Bar b), dann kann die überladene Funktion ja nur aufgerufen werden, wenn beide Operhanden ausgewertet wurden.

Wenn Du auf Nummer Sicher gehen willst, kannst Du (bool)A && (bool)B machen, um explizit boolsche Ausdrücke miteinander zu vergleichen, dann wird er nie überladen.
Ist das zweite (bool) nicht überflüssig? Oder "sieht" der Compiler, dass dort auf jeden Fall zwei boolsche Ausdrücke vorliegen und nimmt nur dann die Optimierung vor?

Nur, wenn beides primitive Datentypen sind, ist der Cast überflüssig. Und Du als Mensch siehst es halt nicht immer explizit, wenn da while (doSomething() && isSomething()) steht...

Viele Grüße,
Christian