指定的初始化程序
Designated initializers
显然,指定的初始化程序不是"正确的"C++。对此有其他选择吗?
我喜欢将其用于结构,因为:
- 在创建结构对象时,可以选择性地设置变量
- 初始化的顺序无关紧要
- 变量可以是常量
- 这可以在c++17中与基类结合使用
谢谢Jelle
给定
struct S {
int x, y, z;
}:
S s {
.y = 1; // not standard until C++20
};
有其他选择吗?
您可以使用位置列表初始化:
S s{0, 1};
它有一个缺点(可以说是一个好处,取决于情况(,即成员名称不明确,含义取决于成员的顺序,并且最后一个明确初始化之前的所有成员也必须存在。
另一种选择:稍后分配成员。
S s{};
s.y = 1;
它的缺点是不能用于初始化常量成员。另一个缺点是这不是一个单独的初始化表达式。这可以通过使用一个函数来解决:
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) {}
};
在某些情况下,这可能要简单得多,但在其他情况下(例如这种类似向量的情况(则完全不清楚。另一个缺点是缺少琐碎的构造函数。
相关文章:
- 在C/C++中执行"_dl_init"(程序初始化)是单线程的吗
- 内存清理程序报告全局对象构造中未初始化值的使用
- 为什么我的 c++ 程序检查不是初始化的变量?
- wxWidgets 拖放文件事件处理程序初始化问题(无效static_cast)
- 程序如何知道静态变量是否需要初始化?
- 初始化和终止Qt应用程序的正确方法?
- 指定的初始化程序
- 错误:为函数__THROW__asm提供了初始化程序
- C++引物动态数组初始化程序的数目超过大小
- 在C++初始化程序列表中使用Integer Literals
- 程序在初始化期间未与数组一起运行
- 程序在没有输入的情况下退出,它有基本的,驱动的类属性初始化问题
- 如何在程序中动态初始化对象
- DLL – 在 DLL 初始化时填充的静态向量,向客户端程序返回零大小
- 通过C++应用程序初始化节点.js环境
- Python 在主机程序初始化后连接到C++ dll?
- WASAPI+windows商店应用程序初始化
- 使用log4cxx与Visual Studio 2010.应用程序初始化错误
- 在引导过程中,在驱动程序初始化后执行操作
- 循环内部的迭代程序初始化是否被认为是糟糕的风格,以及为什么