问题标签 [aggregate-initialization]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
33 浏览

c++ - 聚合初始化和删除的复制构造函数,也就是不可复制的对象作为字段

有没有办法在向量下方初始化?

最明显的(至少对我而言)方法行不通。问题是 std::atomic_bool is_enabled 已删除复制构造函数,我不知道该怎么做。:)

0 投票
1 回答
82 浏览

c++ - 不使用聚合初始化直接初始化不可复制、不可移动的成员

背景

假设我正在尝试使用平面数组实现一个固定大小的多维数组:

_elems成员被公开以启用不可复制、不可移动类型的聚合初始化:(假设non_movable具有显式(int)构造函数)

这要归功于 C++17 保证的复制省略 - 的相应元素_elems直接从未实现的纯右值初始化,而不需要移动构造函数。

问题

现在的问题是:在上面的声明中,多维数组像一维数组一样被初始化。我将其称为“平面初始化”,与“嵌套初始化”相反:

我们如何才能启用嵌套初始化,而不必将用于实现的底层容器multi_array从一维数组更改为多维数组?

我想这需要一个自定义构造函数,但我不知道如何通过构造函数“透明地”传递未实现的纯右值。我能想到的就是用它们构造一个参数,然后从参数中移动,这对于不可移动的类型不起作用。

最小的可重现示例

现场演示

0 投票
5 回答
1996 浏览

c++ - 是否可以防止遗漏聚合初始化成员?

我有一个包含许多相同类型成员的结构,就像这样

问题是,如果我忘记初始化结构成员之一(例如wasactive),如下所示:

编译器不会抱怨它,但我会有一个部分初始化的对象。我怎样才能防止这种错误?我可以添加一个构造函数,但它会重复变量列表两次,所以我必须输入三次!

如果有 C++11 的解决方案,还请添加C++11答案(目前我仅限于该版本)。不过,也欢迎更新的语言标准!

0 投票
1 回答
79 浏览

c++ - 对象初始化中是否允许指向 this 成员的指针?

聚合初始化,将指针设置为 struct member,以下代码是合法的:

0 投票
2 回答
78 浏览

c++ - 仅初始化结构或数组的前 n 个成员

我正在使用 RAD studio 10.2 附带的 clang 编译器(我认为是 c++ 11)。我今天错误地发现结构或数组的前 n 个成员可以使用通常的大括号进行分配,例如

上面的编译和工作正常,但我从来没有遇到过这个,也没有见过它以前使用过,我在网上找不到它的提及(也许我正在使用错误的措辞类型进行搜索)。这个 c++ 记录了吗?

0 投票
4 回答
176 浏览

c - ISO C95 数组初始化保证

我试图找到确认或反驳以下声明的文件

导致一个缓冲区初始化为所有相同的空字符

但无法找到(或理解/破译)任何东西。我专门在旧规范中寻找细节,C99 参考也可以。谢谢

0 投票
1 回答
131 浏览

c++ - 如何聚合初始化一个从虚拟类型继承的结构?

根据[dcl.init.aggr],如果它具有(除其他外)虚函数(包括从具有虚析构函数的类型继承),我无法聚合 init 类型。但是,我想避免编写大量样板构造函数。

MWE:

在我的设置中,我有很多类型Derived除了它们必须继承自Base.

有没有办法避免Derived(int i) : Base(), i(i) {}为所有这些编写构造函数?

0 投票
1 回答
42 浏览

c++ - 带有数据数组的 C++ 聚合初始化程序行为

当改变数据数组的顺序时,似乎data总是由聚合初始化器(不是alter)初始化的。为什么?

编译器不应该将第一个有效内存块视为初始化目标吗?

首先,我有一个 SqList 类和一个重载的 operator<< 来打印内容。

在 main() 中,使用聚合初始化器创建 SqList 的实例

有趣的是,如果我交换dataalterin的顺序SqListdata总是被初始化为{1,2,3,4,5}

如果您有兴趣,这是代码。

编译器探索

0 投票
0 回答
79 浏览

c++ - c++ 如何创建一个存储 lambdas 并且可以作为指定初始化器传递给函数的聚合

我正在尝试传递一个将函数存储为指定初始化程序的聚合,但没有成功。

这是我尝试过的:

这就是我试图传递函数的方式

错误消息之一:

0 投票
1 回答
58 浏览

c++ - 不可复制基类的聚合初始化

我正在从不可复制的基类构造派生类。我想在初始化程序Base中聚合初始化:

但我得到:

据我了解,noncopyable无法初始化,足够公平。然后我可以以某种方式制作聚合初始化程序以便跳过不可复制的初始化吗?(我尝试了例如Base{{},a}没有真正理解的事情,但这也不起作用:~noncopyable受保护)。

或者我是否需要明确定义Base::Base哪个会跳过noncopyable初始化,使用它Derived::Derived而不是聚合初始化?