Condition-Auswertung



  • Hallo.

    if (some_object)
      irgendwas;
    

    Wie genau wird nun entschieden, ob some_objekt true oder false ist? Mit static_cast<bool>?



  • Das kommt drauf an. Wenn some_object einen operator bool() bereitstellt, wird der genommen. Wenn some_object einen Conversion-operator bereitstellt, der in etwas nach bool konvertierbares konvertiert, wird dieser genommen.



  • Wenn some_object einen Conversion-operator bereitstellt, der in etwas nach bool konvertierbares konvertiert, wird dieser genommen.

    Und was wäre das? Geht der Compiler dann alle Conversion-operators durch und prüft für jeden, ob der daraus folgende Typ zu bool konvertierbar ist?



  • Beispiel: C++ Streams.
    C++ Streams haben einen operator void*(), deshalb kann ich überprüfen, ob der Stream "good" ist, indem ich if(stream) schreibe. Hier wird der operator void*() verwendet, und void* ist nach bool konvertierbar.



  • Wurstinator schrieb:

    Wenn some_object einen Conversion-operator bereitstellt, der in etwas nach bool konvertierbares konvertiert, wird dieser genommen.

    Und was wäre das? Geht der Compiler dann alle Conversion-operators durch und prüft für jeden, ob der daraus folgende Typ zu bool konvertierbar ist?

    Ja, genau das.



  • In Ordnung, danke sehr.


Log in to reply