inline for deklaration?



  • Hallo,

    Wenn ich in einer Klasse eine Methode habe die inline sein soll, kommt dann das Keyword inline vor die Deklaration der Methode (also im Header der Klasse), oder vor die Definition der Methode (also im cpp file) oder vor Deklaration UND Definition?

    Danke



  • Wenn du die Funktion gleich bei der Klassen Deklaration initialisierst wird sie autom. inline aufgerufen ansonsten, schreib das inline halt davor.

    Gruß Tobi.



  • T0bi schrieb:

    Wenn du die Funktion gleich bei der Klassen Deklaration initialisierst wird sie autom. inline aufgerufen

    Stimmt nicht ganz. Es wird dem Kompiler nur die Möglichkeit gegeben dies zu tun. Der Compiler entscheidet letzendlich darüber was inline ist und was nicht.

    Edit: Hier eine schöne FAQ
    http://www.c-plusplus.net/forum/viewtopic-var-t-is-105893.html



  • Seit wann kann man Funktionen initialisieren? 🙄

    Die Funktion ist ein 3Zeiler und mir zu groß um sie in die Klasse zu schreiben. Also einfach inline vor die Deklaration und vor der Definition im cpp file kann ich das inline dann weglassen?



  • Nein, du deklarierst die Funktion normal in der Klasse und schreibst die inline-Definition in den Header.



  • Bashar schrieb:

    Nein, du deklarierst die Funktion normal in der Klasse und schreibst die inline-Definition in den Header.

    also so:

    // Foo.h
    class Foo {
    public:
       void bar();
    };
    
    void Foo::bar() { ... }
    

    ?

    Für was brauch ich dann überhaupt das keyword inline?



  • Für die inline-Definition. Deins ist ja keine. Damit fällst du spätestens auf die Nase, wenn der Header in mehreren Quelldateien eingebunden wird.



  • Das sind alles Inline-Methoden:

    Implizit inline

    class Foo
    {
      void bar() { /*...*/ }
    };
    

    Explizit inline

    class Foo
    {
      void bar();
    };
    
    inline void Foo::bar() { /*...*/ }
    

    Und das sollte IMHO auch richtig sein

    class Foo
    {
      inline void bar();
    };
    
    void Foo::bar() { /*...*/ }
    

    Ansonsten müssen inline-Deklaration und -Definition in derselben Übersetzungseinheit stehen, also üblicherweise dem Header, sonst weiß der Compiler ja nicht, mit was er den inline-Aufruf erstzen soll.

    Und zum Schluss noch ein wenig Stroustrup:

    Die Angabe von inline ist ein Hinweis an den Compiler, daß er versuchen soll, den Code (...) inline zu generieren. (...) Es [ist] unmöglich zu garantieren, daß jeder Aufruf einer inline-Funktion tatsächlich inline generiert wird.


Anmelden zum Antworten