gpt4 book ai didi

C++ 数组构造函数

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:27:24 25 4
gpt4 key购买 nike

我只是想知道,是否可以在类构造时立即创建类的数组成员:

class C
{
public:
C(int a) : i(a) {}

private:
int i;
};

class D
{
public:
D() : a(5, 8) {}
D(int m, int n) : a(m,n) {}

private:
C a[2];

};

据我搜索,在 C++ 中不可能在上述构造函数中创建数组。或者,数组成员可以在 Constructor block 中初始化,如下所示。

class D
{
public:
D() {
a[0] = 5;
a[1] = 8;
}
D(int m, int n) {
a[0] = m;
a[1] = n;
}
private:
C a[2];

};

但是,这不再是数组创建,而是数组赋值。数组元素由编译器通过它们的默认构造函数自动创建,随后它们被手动分配给 C'tor block 中的特定值。什么是烦人的;对于这样的解决方法,C 类必须提供默认的构造函数。

有没有人有任何想法可以帮助我在构造时创建数组成员。我知道使用 std::vector 可能是一种解决方案,但由于项目条件,我不允许使用任何标准、Boost 或第三方库。

最佳答案

数组——一个比 C++ 本身更早的概念,直接从 C 继承——实际上并没有可用的构造函数,正如您基本上注意到的那样。考虑到您提到的奇怪限制(没有标准库?!?!?),您几乎没有什么解决方法了——您可以将 a 设为指针到 C 而不是 C 的数组,为其分配原始内存,然后使用“placement new”初始化每个成员(这至少解决了 C 没有默认构造函数的问题)。

关于C++ 数组构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1944609/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com