const 静态数据成员的初始值设定项是否被视为默认成员初始值设定项?

-1 c++ static-members in-class-initialization

数据成员的初始值设定项是否const static被视为默认成员初始值设定项?

相关的写法是[class.mem.general]/10

大括号或等于初始化器只能出现在数据成员的声明中。(对于静态数据成员,请参阅 [class.static.data];对于非静态数据成员,请参阅 [class.base.init] 和 [dcl.init.aggr])。非静态数据成员的大括号或等于初始值设定项指定成员的默认成员初始值设定项[..]

例如:

constexpr int f() { return 0; }

struct A {
  static const int I = f();
};
Run Code Online (Sandbox Code Playgroud)

大括号或等于初始化器 是否f()被视为默认成员初始化器?

Cal*_*eth 6

不。

静态数据成员不会在构造函数中初始化。f()只是 的初始化器A::I

默认成员初始化程序用于初始化每个构造函数中的非静态数据成员,其中mem-initializer-list不会以其他方式初始化该成员。也就是说,它是该member的初始值设定项的默认值

[class.base.init#9]