Zoeken…


Invoering

Een inline-variabele mag in meerdere vertaaleenheden worden gedefinieerd zonder de regel voor één definitie te overtreden. Als het meervoudig is gedefinieerd, voegt de linker alle definities samen in één object in het uiteindelijke programma.

Een statisch gegevenslid definiëren in de klassedefinitie

Een statisch gegevenslid van de klasse kan volledig worden gedefinieerd binnen de klassedefinitie als het inline wordt verklaard. De volgende klasse kan bijvoorbeeld worden gedefinieerd in een koptekst. Voorafgaand aan C ++ 17, zou het nodig zijn geweest om een .cpp bestand te bieden dat de definitie van Foo::num_instances zodat het slechts eenmaal zou worden gedefinieerd, maar in C ++ 17 de meerdere definities van de inline variabele Foo::num_instances verwijzen allemaal naar hetzelfde int object.

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

Als speciaal geval is een statisch gegevenslid van constexpr impliciet 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
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow