是否可以使用初始值设定项列表中的其他类成员初始化类成员
Can class member be initialized with another class member in the initializer list?
假设我有两个成员的类,
class App
{
public:
App() : window(1366, 768, "Title"), drawer(window) {}
private:
Window window;
Drawer drawer;
}
并且抽屉类具有构造函数Drawer(const Window&)
。
使用另一个类成员窗口初始化 App 类成员抽屉是否有效,如本例所示?
是的,以下内容有效:
class App
{
public:
App() : window(1366, 768, "Title"), drawer(window) {}
private:
Window window;
Drawer drawer;
};
非静态数据成员按类定义中的声明顺序进行初始化。因此,在这种特定情况下,它的工作原理就像在App
定义中drawer
之前声明window
一样。但是,如果您更改顺序,这将无法按预期工作。
但是编译器会以适当的警告级别警告您。如果顺序颠倒,带有-Wall
选项的 GCC 8.2 会发出以下警告。
#1 with x86-64 gcc 8.2
<source>: In constructor 'App::App()':
<source>:16:14: warning: 'App::window' will be initialized after [-Wreorder]
Window window;
^~~~~~
<source>:15:14: warning: 'Drawer App::drawer' [-Wreorder]
Drawer drawer;
^~~~~~
<source>:13:4: warning: when initialized here [-Wreorder]
App() : window(1366, 768), drawer(window) {}
^~~
由于首先初始化drawer
,因此不会使用使用值 1366 和 768 构造的window
对象进行初始化。
相关文章:
- C++ 双向链表:使用矩阵类成员创建和填充列表
- 模板化检查是否存在带有参数列表的类成员函数?
- 如何将类成员方法的参数列表自动填充写入可变参数?
- 为什么我需要在成员发起器列表中重复基类的模板参数?
- 如何将成员函数作为参数传递并在派生对象上执行方法列表
- 扩展初始值设定项列表和未初始化的成员
- 在成员初始值设定项列表中分配unique_ptr
- 如何在构造器的成员初始值设定项列表中调用两个函数?
- 将初始化器列表/聚合初始化转发到 std::array 成员
- 使用成员初始值设定项列表时没有匹配的函数调用错误
- 类成员函数参数列表是否可以依赖于模板参数?
- 传递可变参数时在成员初始值设定项列表中强制转换
- 解释了构造函数成员初始化列表
- C/C++intellisense 0.26.1不显示结构成员列表
- 如何从 IBM i 文件中获取成员列表
- 类成员列表的C++模板构造
- C++列表:复制成员列表中的本地列表
- 不同类的成员列表实现不起作用
- 如何从类型列表继承,然后调用继承成员列表中的成员
- 类构造函数:不允许类型不完整(在成员列表中)-VS C++w/QT