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;


Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow