C++
Inline-Variablen
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;