是否可以在构造函数体中而不是初始化列表中初始化成员变量?
Is it possible to initialize a member variable in the constructor body, instead of the initializer list?
你可能知道,
A::A() {
this->foo = 1;
}
等同于:
A::A() : foo(1) {
this->foo = 1;
}
由于双重声明,效率低下。
编译器可能会对此进行优化,但在我的例子中 class 不是 POD。
我必须在构造函数主体中定义成员,因为它不能压缩成一行。
有什么办法吗?
不,您不能在构造函数主体中进行初始化。它必须在 mem-initialiser 列表中完成,或使用 in-class 初始化器(在成员声明中)。但是,没有什么能阻止您调用函数(或 lambda)来进行初始化:
A::A() : foo([]() { /* ... */ } ())
{}
// or
A::A() : foo(initFoo())
{}
Foo A::initFoo() { /* ... */ }
你可能知道,
A::A() {
this->foo = 1;
}
等同于:
A::A() : foo(1) {
this->foo = 1;
}
由于双重声明,效率低下。
编译器可能会对此进行优化,但在我的例子中 class 不是 POD。
我必须在构造函数主体中定义成员,因为它不能压缩成一行。
有什么办法吗?
不,您不能在构造函数主体中进行初始化。它必须在 mem-initialiser 列表中完成,或使用 in-class 初始化器(在成员声明中)。但是,没有什么能阻止您调用函数(或 lambda)来进行初始化:
A::A() : foo([]() { /* ... */ } ())
{}
// or
A::A() : foo(initFoo())
{}
Foo A::initFoo() { /* ... */ }