c++ - 指定初始化器
问题描述
显然,指定的初始化器不是“正确的”C++。有没有其他选择?
我喜欢将它用于结构,因为:
- 创建 struct 对象时可以选择设置变量。
- 初始化的顺序无关紧要。
- 变量可以是 const。
- 这可以在 c++17 中与基类结合使用。
谢谢耶勒
解决方案
给定
struct S {
int x, y, z;
}:
S s {
.y = 1; // not standard until C++20
};
有没有其他选择?
您可以使用位置列表初始化:
S s{0, 1};
它有一个缺点(可以说是一个好处,取决于情况)成员名称不明确,这意味着取决于成员的顺序,并且最后一个显式初始化之前的所有成员也必须在那里。
另一种选择:稍后分配成员。
S s{};
s.y = 1;
这有一个缺点,它不能用于初始化 const 成员。另一个缺点是这不是一个单一的初始化表达式。这可以通过使用一个函数来解决:
S init(int y) {
S s{};
s.y = y;
return s;
}
S s = init(1);
还有另一种选择:使用构造函数。
struct S {
int x = 0, y = 0, z = 0;
S(int y): y(y) {}
};
这在某些情况下可能要简单得多,但在其他情况下则完全不明确(例如这种类似向量的情况)。另一个缺点是缺少简单的构造函数。
推荐阅读
- python - 如何在烧瓶中获取 HttpException 的 URL
- c# - RabbitMQ_Broker 状态
- mysql - ORDER BY datediff 使用多个表
- sql-server - 如何在 Visual Studio 中创建行计数条件?
- azure - 哪个 Azure AD 选项可用于多租户应用?
- c# - unity c# 中的双重健康栏
- sas - SAS IFN 功能卡住
- r - 如何根据R中的变量名提取列表中的列表
- visual-studio-code - 打开 VS Code 项目时执行一些命令
- angular - Angular - Ngx-org-chart 样式不起作用