首页 >后端开发 >C++ >您可以在 C 中对数组成员使用构造函数初始值设定项吗?

您可以在 C 中对数组成员使用构造函数初始值设定项吗?

Barbara Streisand
Barbara Streisand原创
2024-11-07 08:33:02190浏览

Can You Use Constructor Initializers for Array Members in C  ?

C 中数组成员的构造函数初始化器

在 C 中使用对象数组时,正确初始化它们可能是一项具有挑战性的任务。本文探讨了对数组成员使用构造函数初始值设定项的限制和解决方法。

非数组初始化

在非数组示例中,结构体 Bar 可以初始化其使用构造函数初始值设定项的成员 foo:

struct Bar {
    Foo foo;

    Bar() : foo(4) {}
};

数组初始化

但是,在数组示例中,struct Baz 无法使用相同的语法初始化其数组成员 foo :

struct Baz {
    Foo foo[3];

    // Incorrect
    Baz() : foo[0](4), foo[1](5), foo[2](6) {}
};

限制

在 C 中,数组缺乏构造函数支持。因此,在任何对象初始化发生之前,数组成员都会默认初始化。因此,不可能直接使用构造函数初始值设定项来初始化数组成员。

解决方法

问题中提供的解决方案是采用解决方法。由于像 std::vector 这样的 STL 构造不可用,因此使用显式 init() 方法创建默认构造函数以进行构造后初始化。这完全避免了对构造函数初始值设定项的需要。

替代解决方案

Barry 的回复建议了一种更新的方法。如果开发环境支持 C 98 以外的 C 标准,则可以使用更新的语法:

struct Baz {
    Foo foo[3]{4, 5, 6};
};

此语法允许使用大括号初始化数组成员,从而无需默认构造函数和显式初始化方法。

以上是您可以在 C 中对数组成员使用构造函数初始值设定项吗?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn