15 Stimmen

Code in Header-Dateien wird immer inlined?

Ich hatte gerade eine Diskussion mit einem Kollegen über Code in Header-Dateien:

Er sagt, dass Code, der in Header-Dateien definiert ist, immer vom Compiler eingefügt wird (wie der Code der Funktion GetNumber() in meinem Beispiel-Header). Ich sage, dass er manchmal inlined wird, wann immer der Compiler sich dazu entschließt. Wer von uns beiden muss nun einen Kuchen mit zur Arbeit bringen, weil er schmutzige Lügen erzählt? Oder haben wir vielleicht beide Unrecht...?

MyClass.hpp

   class MyClass
    {
    public:
    MyClass();
    ~MyClass();

    int GetNumber() const 
    {
     //...; 
     return m_number;
    };

    private:
    int m_number;
    };

1voto

falstro Punkte 32879

Das stimmt nicht, nur der Code in den Mitgliedsfunktionen wird eingefügt (falls der Compiler dies beschließt), wenn er in der Klassendeklaration angegeben ist. Die Mitglieder müssen jedoch definiert werden können, so dass sie als das Äquivalent zu C's static (was die Verwendung innerhalb der Kompiliereinheit ermöglicht, aber nicht mit anderen Objektdateien verknüpft werden kann), wodurch eine Version in jede Objektdatei aufgenommen wird. Probieren Sie es selbst aus. Sie werden feststellen, dass Sie Duplikate erhalten, wenn Sie das Inline-Schlüsselwort für alles außerhalb der Klassendeklaration angeben.

1voto

John Warlow Punkte 2900

Der Compiler entscheidet. Auch mit _inline sagt dem Compiler nur, dass Sie Inline-Code bevorzugen, aber der Kosten-Nutzen-Analysator des Compilers kann anders entscheiden.

Sie können verwenden _forceinline wenn Sie Microsoft C++ um den Code inline zu machen, aber das könnte zu größeren Binärdateien führen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X