C++
Variables en ligne
Recherche…
Introduction
Une variable en ligne peut être définie dans plusieurs unités de traduction sans violer la règle à une définition . S'il est défini par une multiplication, l'éditeur de liens fusionnera toutes les définitions en un seul objet dans le programme final.
Définition d'un membre de données statique dans la définition de classe
Un membre de données statique de la classe peut être entièrement défini dans la définition de classe s'il est déclaré en inline
. Par exemple, la classe suivante peut être définie dans un en-tête. Avant C ++ 17, il aurait été nécessaire de fournir un fichier .cpp
contenant la définition de Foo::num_instances
pour qu'il ne soit défini qu'une seule fois, mais en C ++ 17 les multiples définitions de la variable inline Foo::num_instances
réfèrent tous au même objet int
.
// warning: not thread-safe...
class Foo {
public:
Foo() { ++num_instances; }
~Foo() { --num_instances; }
inline static int num_instances = 0;
};
En tant que cas particulier, un membre de données statique constexpr
est implicitement intégré.
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;