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

c++ - 数组的 C++ 向量

0 投票
4 回答
4540 浏览

c++ - C ++ 11中的最小和最大可变参数模板变体?

我是否正确地阅读了从minmaxminmax就此而言)有新的initializer_list变体但没有Variadic Template变体的标准?

因此,这没关系:

但这不是:

我想,很多人会期望 Variadic Templates 可以轻松实现这一点,因此他们可能会感到失望。

我会说将VT用于min并且max会矫枉过正

  • 可变参数模板能够处理多种类型
  • 初始化器列表检查所有类型在设计上是否相同

因此 IL 更适合这项任务。

我的解释正确吗?

0 投票
3 回答
236 浏览

c++ - 使用带有继承变量的初始化列表

我一直在摆弄一个程序大约 20 分钟,我发现由于某种原因它不会让我在初始化列表中使用继承的变量。这个程序,例如:

会报错

错误:“B”类没有任何名为“i”的字段</p>

但是,如果将构造函数更改为此:

它编译。

我从来不知道你不能初始化继承的变量。我的问题是,为什么?

0 投票
1 回答
166 浏览

c++11 - 初始化列表 (C++0x) 中的闭包删除器和编译器警告

warning C4355: 'this' : used in base member initializer list从 Visual C++ 2010 得到一个:

我有一个持有句柄的类,我想自动关闭句柄,即使该类的 ctor 失败(因此不调用它的 dtor)。但是,我不想费心制作一个完整的句柄包装类,而宁愿将它保存在一个智能指针中。所以我写了这个:

在关闭之前,我用类似的东西初始化 _handle _handle(nullptr, bind(PortDeleter, placeholders::_1, ref(_log))),但这需要一个单独的定义。

我的问题:警告是否与此特定实例有关?无论哪种方式,详细原因是什么?有没有一种简单的方法来避免它?

0 投票
2 回答
203 浏览

arrays - C++0x:为什么在“operator[]”中禁止“braced-init-list”?

我刚刚注意到,在 N3291 中标记了一个更改(5.2.1 Subscripting [expr.sub]):

之前,可以operator[]使用新的braced-init-list重载:

现在将其删除并替换为:

括号初始化列表不应与内置下标运算符一起使用。

出了什么问题?

0 投票
1 回答
231 浏览

c++11 - C++0x:重载解析

在标准文本中有一个例子在8.5.4 (3) List-initialization [dcl.init.list]

(这个例子是关于 ref-to-temp,但我在这里指的是重载解决方案)。

而斯科特迈耶斯在他的演讲/幻灯片中讲述了一个不同的故事:

std::initializer_list 参数总是优先于其他类型:

这些例子略有不同,但不是同一件事吗?何时以及如何使用initializer_list-constructors 进行重载解析?还是这里有不同的问题?

两种情况下的超载是如何决定的?如果两者都是正确的,我在这里错过了什么?

编辑/澄清Keric评论:我的感觉是,这两个例子相互矛盾:

  • Std 给出了一个示例,其中 aconst char*转换为 a string,它与提供的不匹配initializer_list<int>,因此使用提供的“正常” const string&-c'tor。
  • Scott 的示例在-c'tor 可用并因此被选择{double, double}时进行初始化,因为他认为该列表是首选。intializer_list<int>因此,以(double, double)这种方式初始化时,永远不会选择还提供的 -c'tor。

当然,Std 总是正确的,但也许我错误地应用了这个例子。Std 示例&中有,我认为这与我的问题无关,但也许我错了。

Scott 的幻灯片是最新的,我看不到标准中的相关部分已经改变到这方面(尽管很难将所有内容都纳入范围,因为它有点“广泛传播”:-)

编辑 2:我收到了 Scott 本人的一封邮件,说标准中有一个后期更改尚未纳入幻灯片。

0 投票
1 回答
2383 浏览

c++ - 如何使用初始化列表初始化不可复制的容器?

可能重复:
我可以列出初始化只移动类型的向量吗?

我使用 gcc 4.6.1 编译这段代码

在 g++ 抱怨的内容中,有类似

在这种情况下,似乎 g++ 仍然尝试复制构造函数,尽管我放入初始化列表的是 r 值。那么我怎么能用初始化列表初始化一个不可复制的容器呢?

0 投票
1 回答
698 浏览

c++ - 转换初始化器列表

我需要将用 C++ 0x 编写的类转换为在 Visual Studio 2008 中编译的类。代码使用 std::initializer_list。

以下是代码

必须转换为 VS 2008 理解的旧标准。

我真的很难将 100 行新的 C++ 代码更改为旧的 C++。所以,请帮助我。

0 投票
3 回答
27289 浏览

c++ - 如何使用初始化列表构造 std::array 对象?

可能重复:
如何使用 initializer_list 初始化成员数组?

您可以使用初始化列表构造一个 std::array 就好了:

但是,当我尝试从std::initializer_list类中的数据成员或基对象构造它时,它不起作用:

gcc 4.6 的错误:

我怎样才能让它工作,以便我的包装类可以使用初始化列表进行初始化,如下所示:

0 投票
1 回答
4328 浏览

c++ - 分配给结构映射的语法

G++ (4.6) 接受 C++03 中的这种赋值语法,但抱怨“扩展初始化语法仅在 C++0x 中可用”(释义)。我知道我可以创建一个按顺序接受值的构造函数,但我想知道这种语法是否可以接受(没有 C++0x),或者 G++ 是否只是让我满意,因为我对 C+ 非常焦虑+0x。

用 clang++ 编译甚至不允许它(w/C++0x,我假设缺少初始化列表),说“预期的表达式”,这基本上意味着“这到底是什么?”,甚至当我使用构造函数(上面注释掉),它会抛出错误。

摘要:所以基本上,正确的语法是什么,我可以使用初始化列表格式(在 C++03 或 C++0x 中)吗?