当类内成员初始化是强制性的

When in-class member initialization is mandatory

本文关键字:强制性 初始化 成员      更新时间:2023-10-16

当类内成员初始化是严格强制的?

类内成员初始化规则很复杂,可以通过为非静态成员使用Ctor初始化列表并在类外定义静态成员来避免这种情况。恕我直言,这也将声明和定义分开了。

静态常量成员如果在类中需要常量表达式的上下文中使用,则必须具有初始化器。例如,

struct S {
  static const int N = 4;
  int arr[N]; // okay
};
const int S::N;
struct T {
  static const int N;
  int arr[N]; // error
};
const int T::N = 4;