float foo() const { return m_fValue };



  • float foo() const { return m_fValue };
    

    Hallo,
    habe gerade obige Konstruktion(Funktionsdefinition) innerhalb einer fremden Klasse entdeckt. Wozu ist das const dort gut, sehe ich zum ersten mal.

    Und noch eine Frage am Rande: Wann muss ich eine Funktion eigentlich mit Semikolon abschließen und wann nicht, zum Beispiel wird mein Programm kompiliert, egal ob ich die WinMain mit ("};") oder ohne Semikolon nach ("}") abschließe.

    Btw: Forensuche hat sich totgeladen, die Suche mit google war ach nicht der Bringer.



  • Sry, nach dem "return m_fValue" muss natürlich noch ein Semikolon sein.



  • Das "const" bedeutet, dass die Memberfunktion keine werte der klasse ändert.
    damit kann man die Funktion auch von konstanten objekten aufrufen.

    const Foo foo();
    foo.constfunc(); // geht nur wenn constfunc konstant ist
    

    eine funktionsdefinition braucht kein semikolon, ein fehler ist es aber nicht:

    void func()
    {
    }
    

    eine funktionsdeklaration hingegen schon:

    void func();
    


  • Besten Dank!



  • das const sagt einfach dass mit dieser methode nicht in der aktuellen instanz geändert wird

    sprich im *this wird keine membervariable verändert
    auch funktion die solche verändern können nicht aufgerufen werden



  • Ein Semikolon nach geschlossenen geschweiften Klammern brauchst du nur bei der Definition von Klassentypen, Enumerationen und der Aggregat-Initialisierung bei PODs und Arrays.

    class MyClass
    {
    
    };
    
    struct MyStruct
    {
    
    };
    
    union MyUnion
    {
    
    };
    
    enum MyEnum
    {
       Enumerator1,
       Enumerator2,
    };
    
    float Array[] = {2, 3};
    MyStruct Obj = {};
    

    Funktionen und lokale Blöcke (z.B. von If-Abfragen, Schleifen oder einfach so) benötigen hingegen kein Semikolon. Als Leeranweisung ist es zwar erlaubt, jedoch überflüssig.

    int main()
    {
        {
            int a;
        }
    
        if (Condition)
        {
            for (int i = 0; i < 35; ++i)
            {
    
            }
        }
    }
    

Anmelden zum Antworten