是否可以在构造函数体中初始化成员变量,而不是初始化列表?

时间:2018-02-01 17:16:02

标签: c++ ctor-initializer

你可能知道,

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

与:

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

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

有没有办法做到这一点?

1 个答案:

答案 0 :(得分:3)

不,你不能在构造函数体中初始化。它必须在mem-initialiser列表中完成,或者使用类内初始化程序(在成员声明中)。但是,没有什么能阻止你调用函数(或lambda)进行初始化:

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

// or

A::A() : foo(initFoo())
{}

Foo A::initFoo() { /* ... */ }