在构造函数初始值设定项列表中使用成员
Use member in constructor initializer list
我可以安全地使用成员初始化其他成员吗?
class Class {
public:
Class(X argument) : memberA(argument), memberB(memberA) {}
A memberA;
B memberB;
};
在这里,我们使用构造函数的参数来初始化memberA
。然后,我们依赖于这样一个事实,即这发生在memberB
的初始化之前,并使用memberA
初始化memberB
。
如果我们假设X
、A
和B
是std::string
,那么只要我们不更改成员声明的顺序,上面的示例就可以工作(用gcc
测试(。但这实际上是由标准保证的吗?还是我滥用了编译器的实现细节?
是的,根据class.base.init#15 ,这是安全的
mem初始值设定项的表达式列表或braked init列表在构造函数的函数参数范围内,可以使用它来引用正在初始化的对象。
本注释还有一个this->i
的示例,显示以前初始化的类成员可以用于初始化mem初始化器中的其他类成员。(在本例中,this->
仅用于消除成员和构造函数参数(均命名为i
(的歧义。
请注意,在使用该成员之前,该成员已经初始化,因为它来自class.base.init#13.3
。。。非静态数据成员按照它们在类定义中声明的顺序进行初始化(同样,与mem初始化器的顺序无关(。
相关文章:
- C++ 双向链表:使用矩阵类成员创建和填充列表
- 模板化检查是否存在带有参数列表的类成员函数?
- 如何将类成员方法的参数列表自动填充写入可变参数?
- 为什么我需要在成员发起器列表中重复基类的模板参数?
- 如何将成员函数作为参数传递并在派生对象上执行方法列表
- 扩展初始值设定项列表和未初始化的成员
- 在成员初始值设定项列表中分配unique_ptr
- 如何在构造器的成员初始值设定项列表中调用两个函数?
- 将初始化器列表/聚合初始化转发到 std::array 成员
- 使用成员初始值设定项列表时没有匹配的函数调用错误
- 类成员函数参数列表是否可以依赖于模板参数?
- 传递可变参数时在成员初始值设定项列表中强制转换
- 解释了构造函数成员初始化列表
- C2436 '{ctor}':构造函数初始值设定项列表中的成员函数或嵌套类
- C/C++intellisense 0.26.1不显示结构成员列表
- 为什么在 ctor 的参数列表中将成员"x"的类型替换为"decltype(x)"会破坏类模板参数推导?
- C++删除 for 循环中的列表成员
- C++迭代时删除列表成员:标准解决方案不起作用
- 如何返回列表成员 c++ 的空指针
- 与枚举器列表成员相关联的整数值是多少?