Buscar..


Introducción

Una variable en línea puede definirse en varias unidades de traducción sin violar la Regla de una definición . Si se define de forma múltiple, el enlazador combinará todas las definiciones en un solo objeto en el programa final.

Definición de un miembro de datos estáticos en la definición de clase

Un miembro de datos estáticos de la clase puede estar completamente definido dentro de la definición de la clase si se declara en inline . Por ejemplo, la siguiente clase se puede definir en un encabezado. Antes de C ++ 17, habría sido necesario proporcionar un archivo .cpp para contener la definición de Foo::num_instances para que se definiera solo una vez, pero en C ++ 17 las definiciones múltiples de la variable en línea Foo::num_instances todos se refieren al mismo objeto int .

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

Como caso especial, un miembro de datos estáticos constexpr está implícitamente en línea.

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
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow