在類定義中定義靜態資料成員

如果宣告為 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 靜態資料成員是隱式內聯的。

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;