C++
Variabili in linea
Ricerca…
introduzione
Una variabile in linea può essere definita in più unità di traduzione senza violare la regola della definizione unica . Se è definito a più livelli, il linker unirà tutte le definizioni in un singolo oggetto nel programma finale.
Definizione di un membro dati statico nella definizione della classe
Un membro di dati statici della classe può essere completamente definito all'interno della definizione di classe se è dichiarato in inline
. Ad esempio, la seguente classe può essere definita in un'intestazione. Prima di C ++ 17, sarebbe stato necessario fornire un file .cpp
per contenere la definizione di Foo::num_instances
modo che fosse definito solo una volta, ma in C ++ 17 le definizioni multiple della variabile inline Foo::num_instances
riferiscono tutti allo stesso oggetto int
.
// warning: not thread-safe...
class Foo {
public:
Foo() { ++num_instances; }
~Foo() { --num_instances; }
inline static int num_instances = 0;
};
Come caso speciale, un membro dati statico di constexpr
è implicitamente in linea.
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;