是否可以在构造函数主体中初始化成员变量,而不是初始值设定项列表



你可能知道,

A::A() {
    this->foo = 1;
}

与以下相同:

A::A() : foo(1) {
    this->foo = 1;
}

由于双重声明,这是低效的。
编译器可能会对此进行优化,但就我而言,该类不是 POD。
我必须在构造函数主体中定义成员,因为它不能压缩成一行。

有什么办法可以做到这一点吗?

不,您不能在构造函数主体中初始化。它必须在 mem 初始化器列表中完成,或使用类内初始化器(在成员声明处(。但是,没有什么可以阻止您调用函数(或 lambda(来执行初始化:

A::A() : foo([]() { /* ... */ } ())
{}
// or
A::A() : foo(initFoo())
{}
Foo A::initFoo() { /* ... */ }

最新更新