问题标签 [initializer-list]

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 投票
4 回答
5355 浏览

c++ - 如果复制列表初始化允许显式构造函数会出现什么问题?

在 C++ 标准 §13.3.1.7 [over.match.list] 中,声明如下:

在复制列表初始化中,如果explicit选择了构造函数,则初始化格式错误。

这就是为什么我们不能这样做的原因,例如,这样的事情:

(请注意,这里发生的不是转换,即使构造函数是“隐式的”也不会是转换。这是foo直接使用其构造函数初始化对象。除了 之外std::string,这里没有转换。)

这对我来说似乎很好。隐式转换绝不会咬我。

如果{ "answer", 42 }可以初始化其他东西,编译器就不会背叛我做错事:

没有问题:调用不明确,代码无法编译,我必须明确选择重载。

由于明确规定了禁令,我觉得我在这里遗漏了一些东西。据我所知,列表初始化选择显式构造函数对我来说似乎不是问题:通过使用列表初始化语法,程序员已经表达了进行某种“转换”的愿望。

会出什么问题?我错过了什么?

0 投票
4 回答
673 浏览

c++ - C++ 通过引用传递给构造函数。成员会是完整的私人副本吗?

在 C++ 中,我有一个接受 class 对象的构造函数descriptor。这个类最近变大了,我需要更多地通过引用传递它。如果我通过引用将其传递给以下 ctor,考虑到它未声明为引用类型,该成员是否仍会制作自己的副本?

或者

0 投票
1 回答
537 浏览

c++ - 结构与联合内部的`initializer_list`ctor?

我有一个 POD 结构,但为了方便起见,我希望它有std::initializer_listctor。默认 ctor、复制 ctor 和 dtor 是隐式的。然而,似乎使用initializer_listctor 会取消该结构作为 POD 的资格,因此它不能位于联合内部:

gcc 4.6 --std=c++0x:

周围有吗?是否与 c++11 的无限制联合功能有关?

0 投票
2 回答
2882 浏览

c++ - 如何在构造函数中初始化数组?

可能重复:
在 C++ 中的类初始化程序中初始化 const 数组

如果我有一个类的成员变量是一个布尔数组,我如何将构造函数的初始化列表中的数组初始化为所有假值?还是默认将它们初始化为全为假?

0 投票
3 回答
2554 浏览

c++ - 初始化列表和赋值重载(运算符 =)

赋值运算符的重载是否会传播到初始化列表?

例如,假设一个类:

和一个构造函数:

初始化器列表会计算出赋值运算符重载std::string吗?如果没有,是否有解决方法?

特别是对于 GCC。

0 投票
2 回答
2461 浏览

c++ - 如何初始化抽象基类的受保护成员?

也许我什么都不担心。我希望数据成员严格遵循 RAII 习语。如何将抽象基类中的受保护指针成员初始化为空?

我知道它应该为空,但确保它被普遍理解不是更好吗?

将初始化代码放在初始化列表之外有可能无法运行。考虑到将此指针分配到堆栈上的装配操作,它们不能在多线程环境中以几乎相同的方式(作为 c'tor 主体)被中断,或者堆栈扩展是否保证是原子的?如果保证析构函数运行,那么即使处理器没有原子地执行它,堆栈扩展是否也有这样的保证?

这么简单的问题怎么会变得如此广泛?谢谢。

如果我可以避免使用很棒的 std:: 库,那我就处于极简主义环境中。

0 投票
3 回答
2252 浏览

c++ - 使用具有递归定义类型的 C++11 initializer_list 使用 constexpr

是否可以使用 C++11initializer_list来组装递归定义的类,例如Foo,使用constexpr构造函数:

我可以初始化一个Foo<3>使用:

最好使用 Foo<3> a = {1,2,3} 代替。如果有一个constexpr tail功能,initializer_list我认为它应该可以工作。

0 投票
3 回答
6171 浏览

c++ - 为什么'std::vectorb{2};' 创建一个 1 元素向量,而不是 2 元素向量?

过去几天我一直在玩 C++11,但我想出了一些奇怪的东西。

如果我想统一初始化一个int:

但是如果我对 std::vector 做同样的事情:

不构造二元素数组,而是构造一个元素值为 2 的数组。似乎要获得这种效果,需要更加明确:

但不像 b 的声明 - 这似乎不一致。我见过一些其他的东西达到同样的效果。我要问的是——这种行为是在最终的 C++11 标准中,还是只是在早期实施的草案中?如果是这样,为什么标准委员会会包括这种行为?似乎它违背了统一初始化的全部目的,因为必须记住哪些类具有初始化列表构造函数,并且只对这些类使用旧的 () 语法而不是 {}。或者完全放弃统一初始化。

这似乎是一个很大的“陷阱”。但它可能有我不知道的优点。

编辑:这段代码:

在 gcc 4.6.2 上输出“2”

0 投票
3 回答
2729 浏览

c++ - 堆分配结构的初始化列表

我有一个 Visual Studio 2008 C++ 项目,我想在其中堆分配一个结构并使用初始化列表对其进行初始化。

有没有办法做到这一点?

0 投票
1 回答
489 浏览

c++ - 内联构造函数可以在 C++ 中使用初始化列表吗?

我一直在研究 API 的源代码,发现没有使用初始化列表,而是将其移至构造函数主体。我认为这是次优的,但后来注意到这些构造函数是内联的。

那么在使用带有内联构造函数的初始化列表时是否有一些限制?10倍