DoppeltGemoppelt



  • Hi, ist eigentlich eine der beiden unten stehenden Varianten vorzuziehen?

    static int Max()
    {
    	return 0x7fffffff;
    }
    
    static int Max()
    {
    	static int max = 0x7fffffff;
    	return max;
    }
    

    Ich stelle mir zumindest vor, dass bei vielen Aufrufen die zweite Variante besser sein könnte, da hier die int Variable nach dem ersten Aufruf schon im Speicher existiert und nicht immer wieder neu angelegt werden muss?



  • Das sind verschiedene Dinge. Das gezeigte wird aber trotzdem sehr wahrscheinlich auf das gleiche rauskommen (Optimierungen, Compilerspezifische Dinge usw.).

    Was ist das eigentliche Problem?



  • Normalerweise ist return nur, den Wert ins EAX-Register zu bringen und goto functionExit zu machen. Da ist die zweite nicht schneller.

    Wenn's natürlich ein char* auf einen nullterminierten String wäre, ...
    , aber dann mäßtest Du ja static verwenden, um nicht auf toten Speicher zuzugreifen.

    Einen std::string si zurückgeben? Die static-Version würde einen Aufruf von strlen sparen, dafür ein if mehr haben, also mal gewinnen, außer, der Optimierer kann das strlen wegbügeln. Ich denke, im Allgemeinen ist die erste Variante besser.



  • #define MAX (0x7fffffff)
    


  • hjkhjk schrieb:

    #define MAX (0x7fffffff)
    

    Das ist natürlich auf jeden Fall die beste Lösung. Warum sind wir da bloss nicht drauf gekommen.



  • weil 0x7fffffff ja nicht konstant ist 😉



  • @StellerFragen: Ist das Absicht, dass du die Funktion static machst? Weißt du, was du da tust?



  • 314159265358979 schrieb:

    Das ist natürlich auf jeden Fall die beste Lösung. Warum sind wir da bloss nicht drauf gekommen.

    😃 👍



  • EOutOfResources schrieb:

    314159265358979 schrieb:

    Das ist natürlich auf jeden Fall die beste Lösung. Warum sind wir da bloss nicht drauf gekommen.

    😃 👍

    Meint ihr das jetzt ironisch? An anderer Stelle erzählt ihr hier immer Makros wären Teufelszeug wegen Capselung usw. und jetzt das?

    wxSkip schrieb:

    @StellerFragen: Ist das Absicht, dass du die Funktion static machst? Weißt du, was du da tust?

    Die Funktion gehört in Wirklichkeit zu einer Klasse. Wäre extrem umständlich nur um den Wert zurückgeben zu wollen ein Objekt instanziieren zu müssen.



  • Warum nicht einfach:

    static function() const
    {
        return std::numeric_limits<int>::max();
    }
    

    Das ist sowohl gut optimierbar as auch portabel.



  • Ein static in einer Klasse ist etwas ganz anderes als ein freies static.

    Lies mal den Beitrag von Sebastian Pizer:
    http://www.c-plusplus.net/forum/251918


Log in to reply