如何在 C 中初始化对象数组
在 C 中,初始化对象数组可能看起来很简单,但是有一些复杂的地方考虑。考虑以下结构和类定义:
struct Foo { Foo(int x) { /* ... */ } }; struct Bar { Foo foo; Bar() : foo(4) {} // Valid initialization }; struct Baz { Foo foo[3]; // Incorrect initialization Baz() : foo[0](4), foo[1](5), foo[2](6) {} };
使用 foo(4) 初始化 Bar 是有效的,因为它调用 Foo 的构造函数来初始化 foo 成员。但是,尝试以提供的方式初始化 Baz 是不正确的。
正确的数组初始化
与 Bar 不同,Bar 中只有一个 Foo 类型的对象,Baz 包含三个相同类型的对象。要正确初始化 Baz 中的对象数组,必须采用以下方法:
Baz() { foo[0] = Foo(4); foo[1] = Foo(5); foo[2] = Foo(6); }
这显式调用数组中每个对象的构造函数。
嵌入式的解决方法处理器
在没有像 std::vector 这样的标准库构造的情况下,另一种方法是使用 默认构造函数以及显式初始化方法 ,例如 init(),允许您将初始化推迟到构造之后:
Baz() {} void Baz::init() { foo[0] = Foo(4); foo[1] = Foo(5); foo[2] = Foo(6); }
以上是如何在 C 中正确初始化对象数组?的详细内容。更多信息请关注PHP中文网其他相关文章!