C++
Inline variabelen
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;