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;


Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow