A foo; oder A foo();?



  • Öhm ja, am besten mache ich es kurz: Gibt es einen Unterschied ob man die Klammern dort hinschreibt oder nicht?



  • The-Kenny schrieb:

    Öhm ja, am besten mache ich es kurz: Gibt es einen Unterschied ob man die Klammern dort hinschreibt oder nicht?

    Wie Dir ein kurzer Test hätte bestätigen können: ja. Ersteres definiert eine Variable, zweiteres deklariert eine Funktion.



  • Konrad Rudolph schrieb:

    The-Kenny schrieb:

    Öhm ja, am besten mache ich es kurz: Gibt es einen Unterschied ob man die Klammern dort hinschreibt oder nicht?

    Wie Dir ein kurzer Test hätte bestätigen können: ja. Ersteres definiert eine Variable, zweiteres deklariert eine Funktion.

    Hm ne, das ist mir schon klar^^ Ich hab mich wohl etwas undeutlich ausgedrückt.

    Ich meinte nicht die Funktionsdeklaration, sondern die Definition einer Variable eines eigenen Typs:

    struct blubb
    {
        void set();
    };
    
    int main()
    {
        blubb a;
        a.set();
    
        blubb b();
        b.set();
    }
    


  • The-Kenny schrieb:

    Ich meinte nicht die Funktionsdeklaration, sondern die Definition einer Variable eines eigenen Typs:

    Es *ist* in jedem Fall eine Funktionsdeklaration. Der C++-Compiler "argumentiert" folgendermaßen:

    - Die Definition ist a priori doppeldeutig, denn es könnte einerseits eine Variablendefinition gemeint sein (+ Default-Konstruktur-Aufruf) oder eben eine parameterlose Funktionsdefinition mit Rückgabetyp.
    - Diese Doppeldeutigkeit wird *immer* zugunsten der Funktion aufgelöst.

    Mit anderen Worten: *wenn* etwas – rein lexikalisch – eine Funktionsdeklaration sein *könnte* dann *ist* es auch eine. Daher ist 'a b();' *immer* eine Funktionsdeklaration, egal, was 'a' und 'b' für Bezeichner sind.

    /EDIT: Und dass Dein Beispielcode fehlerhaft ist (weil der Compiler sich beschwert, '.set' könne nicht auf eine Funktion angewendet werden), sollte Dir ein einfacher Test eigentlich zeigen.



  • Hm... stimmt.

    Naja, wieder was gelernt, außerdem verstehe ich jetzt was der Fehler mir sagen will *g*

    Danke^^


Anmelden zum Antworten