Sök…


Introduktion

En inlinevariabel tillåts att definieras i flera översättningsenheter utan att kränka One Definition-regeln . Om den definieras multipliceras kommer länken att sammanfoga alla definitioner till ett enda objekt i det slutliga programmet.

Definiera en statisk datamedlem i klassdefinitionen

En statisk datamedlem i klassen kan definieras helt inom klassdefinitionen om den förklaras inline . Till exempel kan följande klass definieras i en rubrik. Innan C ++ 17 hade det varit nödvändigt att tillhandahålla en .cpp fil för att innehålla definitionen av Foo::num_instances så att den bara skulle definieras en gång, men i C ++ 17 de flera definitionerna av inline-variabeln Foo::num_instances hänvisar alla till samma int objekt.

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

Som ett speciellt fall är en constexpr statisk constexpr implicit 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
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow