in-class-initializer 究竟是什么?

What exactly is the in-class-initializer?

我读过很多提到 in-class-initializer 的文字,并且我在 Whosebug 上搜索了很多问题,但是我没有找到任何关于 in-[=13 是什么的精确解释=]-初始化程序。据我所知,在任何函数外声明的内置类型变量将由编译器默认初始化,in-class-initilizer 是否对声明的变量执行相同的操作?

这里有一个简单的in-class初始化例子。它对于减少输入非常有用,尤其是当有多个构造函数签名可用时。 core guidelines中也有推荐。

class Foo {
  public:
    Foo() = default; // No need to initialize data members in the initializer list.
    Foo(bool) { /* Do stuff here. */ } // Again, data member already have values. 

  private:
    int bar = 42; 
    //      ^^^^ in-class initialization
    int baz{};
    //     ^^ same, but requests zero initialization
};

由于数据成员是显式初始化的,您问题的第二部分并不真正适用于 in-class 初始化。