C++
Встроенные переменные
Поиск…
Вступление
Встроенная переменная разрешается определять в нескольких единицах перевода без нарушения правила Единого определения . Если он многократно определен, компоновщик объединит все определения в один объект в конечной программе.
Определение статического члена данных в определении класса
Статический член данных класса может быть полностью определен в определении класса, если он объявлен inline
. Например, следующий класс может быть определен в заголовке. До C ++ 17 было бы необходимо предоставить файл .cpp
для определения определения Foo::num_instances
чтобы он определялся только один раз, но в C ++ 17 несколько определений встроенной переменной Foo::num_instances
все относятся к одному и тому же объекту int
.
// warning: not thread-safe...
class Foo {
public:
Foo() { ++num_instances; }
~Foo() { --num_instances; }
inline static int num_instances = 0;
};
В качестве особого случая constexpr
статических данных constexpr
неявно встроен.
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
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow