C++
Zmienne wbudowane
Szukaj…
Wprowadzenie
Zmienna wbudowana może być definiowana w wielu jednostkach tłumaczeniowych bez naruszania reguły jednej definicji . Jeśli jest wielokrotnie zdefiniowany, linker połączy wszystkie definicje w jeden obiekt w końcowym programie.
Definiowanie statycznego elementu danych w definicji klasy
Element danych statycznych klasy może być w pełni zdefiniowany w ramach definicji klasy, jeśli zostanie zadeklarowany inline
. Na przykład następująca klasa może być zdefiniowana w nagłówku. W Foo::num_instances
wcześniejszych niż C ++ 17 konieczne byłoby dostarczenie pliku .cpp
zawierającego definicję Foo::num_instances
tak aby był zdefiniowany tylko raz, ale w C ++ 17 wiele definicji wbudowanej zmiennej Foo::num_instances
wszystkie odnoszą się do tego samego obiektu int
.
// warning: not thread-safe...
class Foo {
public:
Foo() { ++num_instances; }
~Foo() { --num_instances; }
inline static int num_instances = 0;
};
W szczególnym przypadku constexpr
statyczny constexpr
jest domyślnie wbudowany.
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;