Suche…


Einführung

Eine Inline-Variable kann in mehreren Übersetzungseinheiten definiert werden, ohne dass die One-Definition-Regel verletzt wird. Wenn es mehrfach definiert ist, fügt der Linker alle Definitionen zu einem einzigen Objekt im endgültigen Programm zusammen.

Definieren eines statischen Datenelements in der Klassendefinition

Ein statisches Datenmitglied der Klasse kann in der Klassendefinition vollständig definiert sein, wenn es inline deklariert ist. Beispielsweise kann die folgende Klasse in einem Header definiert werden. Vor C ++ 17 musste eine .cpp Datei .cpp werden, die die Definition von Foo::num_instances sodass sie nur einmal definiert wird, in C ++ 17 jedoch die mehrfachen Definitionen der Inline-Variablen Foo::num_instances beziehen sich alle auf dasselbe int Objekt.

// warning: not thread-safe...
class Foo {
  public:
    Foo() { ++num_instances; }
    ~Foo() { --num_instances; }
    inline static int num_instances = 0;
};

Als Sonderfall ist ein statischer Datenbestandteil von constexpr implizit inline.

class MyString {
  public:
    MyString() { /* ... */ }
    // ...
    static constexpr int max_size = INT_MAX / 2;
};
// in C++14, this definition was required in a single translation unit:
// constexpr int MyString::max_size;


Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow