是否可以在构造函数主体中初始化成员变量,而不是初始值设定项列表
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;
}
由于双重声明,这是低效的。
编译器可能会对此进行优化,但就我而言,该类不是 POD。
我必须在构造函数主体中定义成员,因为它不能压缩成一行。
有什么办法可以做到这一点吗?
不,您不能在构造函数主体中初始化。它必须在 mem 初始化器列表中完成,或使用类内初始化器(在成员声明处(。但是,没有什么可以阻止您调用函数(或 lambda(来执行初始化:
A::A() : foo([]() { /* ... */ } ())
{}
// or
A::A() : foo(initFoo())
{}
Foo A::initFoo() { /* ... */ }
相关文章:
- 一对向量构造函数:初始值设定项列表与显式构造
- 我使用向量来创建类对象列表.初始化向量时如何使用参数调用构造函数?
- 构造函数/函数声明参数列表中的统一初始化
- 在初始化列表之外手动调用基类的构造函数
- 采用初始值设定项列表的构造函数
- 提供初始值设定项列表构造函数的有效方法
- C 标准中是否有任何计划来解决初始化器列表构造函数的不一致性
- 接受迭代器的初始值设定项列表构造函数
- STD :: MAP初始化列表构造函数
- 如何避免丢失自动生成的初始化列表构造函数
- 如何最小化调用列表构造函数(复制构造函数)的次数?
- 初始化列表构造函数错误带有CRTP
- 启用默认初始值设定项列表构造函数
- 使用初始化列表构造函数时C++奇怪的行为
- 自定义列表类的初始值设定项列表构造函数
- 初始值设定项列表构造函数导致右值构造函数不明确
- 调用初始化列表构造函数的不同方式
- 为什么std::array不包含初始化列表构造函数
- C++ 为类模板提供初始值设定项列表构造函数
- 何时使用初始值设定项列表构造函数