问题标签 [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 投票
3 回答
85888 浏览

c++ - 大括号封闭的初始化列表构造函数

我有具有以下构造函数的类表型:

我可以像这样创建一个表型:

但是当我尝试创建这样的一个时出现错误:

输出:

该错误似乎表明有一种方法可以定义一个构造函数,该构造函数采用大括号括起来的初始值设定项列表。有谁知道如何做到这一点?

0 投票
3 回答
5065 浏览

c++ - 为什么我的模板不接受初始化列表

我创建了一个模板如下

我希望它可以被容器调用,也可以被初始化列表调用。我认为它会是initializer_list<int>,当按如下方式调用时。

但是 GCC 表现得好像它不符合标准

谁能解释我如何在没有警告的情况下完成这项工作?谢谢!

0 投票
8 回答
4810 浏览

c++ - 使用无前缀成员变量时如何命名构造函数参数?

当然,没有一种正确的方法可以做到这一点,但我什至想不出任何像样的命名方案,这就是我在这里问的原因。(所以:虽然所有答案都是主观的,但它们仍然有用!)

问题如下: 对于简单的聚合结构,我们不使用成员 var 前缀。

然而,有时提供一个初始化器 ctor 来初始化结构体是很有用的,但是 - 当参数的最自然名称已经被成员变量本身占用时,我无法为参数提出一个合适的命名方案:

其他人在这种情况下使用什么?

0 投票
5 回答
13790 浏览

c++ - initializer_list::size() 上的 static_assert

为什么在 a 中是std::initializer_list<_E>::size不允许的static_assert,即使它constexpr在我的 libstdc++ (v. 4.6)中被声明为 a ?

例如,下面的代码:

给出以下错误:

请注意,这对于一个简单的示例来说效果很好:

0 投票
1 回答
999 浏览

c++ - c++ 初始化器列表和可变参数模板

我想创建一个数组:

为什么不编译?(用 g++ 4.6 测试)

0 投票
8 回答
43372 浏览

c++ - 如何使用 initializer_list 初始化成员数组?

0 投票
3 回答
2378 浏览

c++ - 初始化一个包含自身向量的结构

我有一个菜单系统,我想从常量数据中初始化。AMenuItem可以包含一个作为子菜单的向量MenuItems。但它只能在一定程度上起作用。以下是问题的核心:

g++ -std=c++0x(版本 4.4.5)处理s1and s2,但s3返回:

(见ideone)。难道我做错了什么?

0 投票
6 回答
3593 浏览

c++ - 从初始化列表初始化,但没有 {{{{{{{{ ... }}}}}}}}?

我最近偶然发现了初始化列表的一些问题。考虑一个存储类似地图的数据的程序

这看起来直截了当。但是当初始化它时,它变得丑陋。我想让它看起来像

但是编译器并不想接受这个,因为上面的意思是它应该寻找一个可以分别接受{ "One", 1 }和的双参数构造函数{ "Two", 2 }。我需要添加额外的大括号,使其看起来像一个接受的单参数构造函数{ { ... }, { ... } }

我不想那样写。由于我有一个类似映射的类,并且初始化程序具有映射列表的抽象值,因此我想使用以前的版本,并且独立于任何此类实现细节,例如构造函数的嵌套级别。

一种解决方法是声明一个初始化列表构造函数

现在我可以使用前者,因为当我有一个初始化列表构造函数时,整个初始化列表被视为一个元素,而不是被拆分为多个元素。但我认为构造函数的这种单独需求非常丑陋。

我正在寻找指导:

  • 您如何看待前一种和后一种形式的初始化?在这种情况下需要额外的大括号是否有意义?
  • 您认为在这种情况下添加初始化列表构造函数的要求很糟糕吗?

如果你同意我的观点,前一种初始化方式更好,你能想到什么解决方案?

0 投票
2 回答
3119 浏览

c++ - 将包含 initializer_list 的参数包扩展为构造函数

我打算shared_ptr在即将到来的项目中使用很多,所以(不知道std::make_shared)我想编写一个可变参数模板函数spnew<T>(...)作为shared_ptr-returning的替代new。一切都很顺利,直到我尝试使用构造函数包含initializer_list. 当我尝试编译下面的最小示例时,我从 GCC 4.5.2 得到以下信息:

奇怪的是,如果我std::make_shared替换spnew. 在任何一种情况下,当涉及到时,它似乎都错误地推断出参数initializer_list,错误地将Args...其视为空。这是示例:

这只是我的疏忽还是错误?

0 投票
1 回答
1419 浏览

c++ - C++0x 嵌套初始化列表

我想使用 C++0x 新的初始化程序列表功能来初始化 std::vector ,并为我目前正在处理的新 API 使用编译时定义的项目数。像这样的东西:

你知道如何做到这一点吗?甚至可能吗?我知道我需要使用 TMP 和递归来建立重复字符串的列表,并最终通过常量(例如,枚举)以某种方式访问​​它。但似乎我什至不能像这样嵌套初始化列表。