Funktion mit konstantem Rückgabewert bei konstanter Übergabe: Wie kennzeichnen?



  • Ich habe eine Funktion, die bei gleibem Übergabewert auch immer dasselbe zurückliefert. Wenn es eine memberfunktion wäre, würde man das ja mit const auszeichnen.

    Wie mache ich das bei Funktionen? constexpr geht ja nur, wenn die Funktion inline ist.



  • dsdf schrieb:

    Wenn es eine memberfunktion wäre, würde man das ja mit const auszeichnen.

    Nein, eine Funktion die const ist kann trotzdem noch auf globale / statische Variablen zugreifen. Was du suchst klingt mehr nach einem Qualifizierer wie "pure", aber so etwas hat C++ leider nicht.


  • Mod

    dsdf schrieb:

    Wenn es eine memberfunktion wäre, würde man das ja mit const auszeichnen.

    Häh? Nein. const bei Memberfunktionen hat eine ganz andere Bedeutung.

    Wie mache ich das bei Funktionen? constexpr geht ja nur, wenn die Funktion inline ist.

    Mit constexpr. Wo ist denn der Sinn solch einer Kennzeichnung, wenn die Funktion nicht auch inline ist?



  • Wenn dann mit einem Kommentar. Warum moechtest du sie ueberhaupt besonders kennzeichnen?



  • Deine Funktion ist nicht speziell, jede C++-Funktion ist prinzipiell erstmal seiteneffektfrei. Alles was davon abweicht soll speziell kommentiert werden.


  • Mod

    kennerderzeichner schrieb:

    Deine Funktion ist nicht speziell, jede C++-Funktion ist prinzipiell erstmal seiteneffektfrei. Alles was davon abweicht soll speziell kommentiert werden.

    Bloß weil es so sein sollte, heißt nicht, dass es so ist. Im Zweifelsfall ist immer davon auszugehen, dass eine Funktion Nebeneffekte hat.



  • cooky451 schrieb:

    dsdf schrieb:

    Wenn es eine memberfunktion wäre, würde man das ja mit const auszeichnen.

    Nein, eine Funktion die const ist kann trotzdem noch auf globale / statische Variablen zugreifen. Was du suchst klingt mehr nach einem Qualifizierer wie "pure", aber so etwas hat C++ leider nicht.

    Danke, mit dem g++ geht __attribute__ ((pure))



  • Lustig, ich wusste nicht mal dass GCC so ein Feature hat.



  • SeppJ schrieb:

    Bloß weil es so sein sollte, heißt nicht, dass es so ist. Im Zweifelsfall ist immer davon auszugehen, dass eine Funktion Nebeneffekte hat.

    Beispiel?
    Bei Funktionen für externe Ressourcen ist das offensichtlich, bei allen anderen sollte es nicht so sein.

    Denn globaler State sollte prinzipiell vermieden werden. Und ich rede hier von beobachtbaren Nebeneffekten.



  • kennerderzeichner schrieb:

    SeppJ schrieb:

    Bloß weil es so sein sollte, heißt nicht, dass es so ist. Im Zweifelsfall ist immer davon auszugehen, dass eine Funktion Nebeneffekte hat.

    Beispiel?
    Bei Funktionen für externe Ressourcen ist das offensichtlich, bei allen anderen sollte es nicht so sein.

    Achja jetzt auf einmal. Erst war es noch *jede* C++ Funktion.
    Und mal ganz davon abgesehen dass du "ist" mit "sollte sein" durcheinander bringst.
    Und dass du "seiteneffektfrei" mit "pure" verwechselst.


Anmelden zum Antworten