Returnwert: bool oder int?



  • Was ist der korrekte Returnwert der folgenden Inline-Funktionen, bool oder int ?

    inline int board_c::can_castle_ooo(const int color) const {
      return castle_rights & ((1 + color) >> 0);
    }
    
    inline int board_c::can_castle_oo(const int color) const {
      return castle_rights & ((1 + color) >> 2);
    }
    
    inline int board_c::can_castle(const int color) const {
      return can_castle_ooo(color) || can_castle_oo(color);
    }
    

    Es ist mir wichtig in solchen Aussagen den richtigen Datentyp für den returnwert zu verwenden.

    DANKE schon mal!



  • Afair definiert c++ operator >> nur fuer unsigned Typen. Dementsprechend muss int durch unsigned int ersetzt werden. Des weiteren sollte es nicht sehr schwer sein, den zuletzt ausgefuehrten Operator jeder Funktion festzustellen und zu sagen, ob er einen Wahrheitswert oder eine Zahl zurueckgibt...

    Tomahawk schrieb:

    Was ist der korrekte Returnwert der folgenden Inline-Funktionen, bool oder int ?

    inline int board_c::can_castle_ooo(const int color) const {
      return castle_rights & ((1 + color) >> 0); // int, & ist bitweise Verknuepfung
    }
    
    inline int board_c::can_castle_oo(const int color) const {
      return castle_rights & ((1 + color) >> 2); // dito
    }
    
    inline int board_c::can_castle(const int color) const {
      return can_castle_ooo(color) || can_castle_oo(color); // bool, logisches or
    }
    

    Es ist mir wichtig in solchen Aussagen den richtigen Datentyp für den returnwert zu verwenden.

    Du musst doch selbst wissen, was der Code aussagt/aussagen soll?! Ein Wahrheitswert hat doch eine andere Semantik als eine Zahl (andersrum kann man das nicht unbedingt sagen, aber wenn eine Zahl als Wahrheitswert genutzt werden soll kann man in c++, welches ja bool anbietet, auch bool nutzen).

    DANKE schon mal!

    Bitte sehr.



  • Tomahawk schrieb:

    Was ist der korrekte Returnwert der folgenden Inline-Funktionen, bool oder int ?

    Um das beurteilen zu können, muss man wohl etwas mehr von Deinem Programm gesehen und verstanden haben -- zumindest sehen, wie die Funktionsergebnisse benutzt werden. Die Ausdrücke jeweils hinter dem return sind jedenfalls vom Typ int, falls castle_rights auch vom Typ int ist. Rein theoretisch kann es für einen festen Wert von color mehr als nur zwei mögliche Rückgabewerte geben. Wenn Du also die Information später ausnutzen willst und zwischendurch eine Konvertierung zu bool machst, hast Du ein Problem, da Du dann nicht mehr weißt, welcher Wert != 0 herausgekommen war.

    Gruß,
    SP



  • Tomahawk schrieb:

    Was ist der korrekte Returnwert der folgenden Inline-Funktionen, bool oder int ?

    inline int board_c::can_castle_ooo(const int color) const {
      return castle_rights & ((1 + color) >> 0);
    }
    
    inline int board_c::can_castle_oo(const int color) const {
      return castle_rights & ((1 + color) >> 2);
    }
    
    inline int board_c::can_castle(const int color) const {
      return can_castle_ooo(color) || can_castle_oo(color);
    }
    

    Es ist mir wichtig in solchen Aussagen den richtigen Datentyp für den returnwert zu verwenden.

    DANKE schon mal!

    google mal nach "premature optimization" dein Code und vor allem die Frage riechen seehr stark danach.



  • Aufgrund deiner Namensgebung der Funktion würde ich sagen bool.
    Schließlich kommt die Aussage zurück: Kann oder Kann nicht.

    Falls du doch einen Int haben willst, solltest du die Funktion umbennen.

    Just my 2 cents...
    Branleb



  • Zuerst eine Funktion schreiben, und sich dann aufgrund der Return-Anweisung überlegen, welcher Rückgabetyp wohl angebracht wäre? Scheint mir die falsche Vorgehensweise zu sein...

    Und wieso du bitweise Operationen brauchst, weiss ich auch nicht. pumuckl könnte mit seiner Vermutung aber Recht haben.


Anmelden zum Antworten