问题标签 [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.
c++ - C ++ 11中的最小和最大可变参数模板变体?
我是否正确地阅读了从min
和max
(minmax
就此而言)有新的initializer_list变体但没有Variadic Template变体的标准?
因此,这没关系:
但这不是:
我想,很多人会期望 Variadic Templates 可以轻松实现这一点,因此他们可能会感到失望。
我会说将VT用于min
并且max
会矫枉过正
- 可变参数模板能够处理多种类型
- 初始化器列表检查所有类型在设计上是否相同
因此 IL 更适合这项任务。
我的解释正确吗?
c++ - 使用带有继承变量的初始化列表
我一直在摆弄一个程序大约 20 分钟,我发现由于某种原因它不会让我在初始化列表中使用继承的变量。这个程序,例如:
会报错
错误:“B”类没有任何名为“i”的字段</p>
但是,如果将构造函数更改为此:
它编译。
我从来不知道你不能初始化继承的变量。我的问题是,为什么?
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)))
,但这需要一个单独的定义。
我的问题:警告是否与此特定实例有关?无论哪种方式,详细原因是什么?有没有一种简单的方法来避免它?
arrays - C++0x:为什么在“operator[]”中禁止“braced-init-list”?
我刚刚注意到,在 N3291 中标记了一个更改(5.2.1 Subscripting [expr.sub]):
之前,可以operator[]
使用新的braced-init-list重载:
现在将其删除并替换为:
括号初始化列表不应与内置下标运算符一起使用。
出了什么问题?
c++11 - C++0x:重载解析
在标准文本中有一个例子在8.5.4 (3) List-initialization [dcl.init.list]
(这个例子是关于 ref-to-temp,但我在这里指的是重载解决方案)。
而斯科特迈耶斯在他的演讲/幻灯片中讲述了一个不同的故事:
std::initializer_list 参数总是优先于其他类型:
这些例子略有不同,但不是同一件事吗?何时以及如何使用initializer_list
-constructors 进行重载解析?还是这里有不同的问题?
两种情况下的超载是如何决定的?如果两者都是正确的,我在这里错过了什么?
编辑/澄清Keric的评论:我的感觉是,这两个例子相互矛盾:
- Std 给出了一个示例,其中 a
const char*
转换为 astring
,它与提供的不匹配initializer_list<int>
,因此使用提供的“正常”const string&
-c'tor。 - Scott 的示例在-c'tor 可用并因此被选择
{double, double}
时进行初始化,因为他认为该列表是首选。intializer_list<int>
因此,以(double, double)
这种方式初始化时,永远不会选择还提供的 -c'tor。
当然,Std 总是正确的,但也许我错误地应用了这个例子。Std 示例&
中有,我认为这与我的问题无关,但也许我错了。
Scott 的幻灯片是最新的,我看不到标准中的相关部分已经改变到这方面(尽管很难将所有内容都纳入范围,因为它有点“广泛传播”:-)
编辑 2:我收到了 Scott 本人的一封邮件,说标准中有一个后期更改尚未纳入幻灯片。
c++ - 如何使用初始化列表初始化不可复制的容器?
可能重复:
我可以列出初始化只移动类型的向量吗?
我使用 gcc 4.6.1 编译这段代码
在 g++ 抱怨的内容中,有类似
在这种情况下,似乎 g++ 仍然尝试复制构造函数,尽管我放入初始化列表的是 r 值。那么我怎么能用初始化列表初始化一个不可复制的容器呢?
c++ - 转换初始化器列表
我需要将用 C++ 0x 编写的类转换为在 Visual Studio 2008 中编译的类。代码使用 std::initializer_list。
以下是代码
必须转换为 VS 2008 理解的旧标准。
我真的很难将 100 行新的 C++ 代码更改为旧的 C++。所以,请帮助我。
c++ - 如何使用初始化列表构造 std::array 对象?
您可以使用初始化列表构造一个 std::array 就好了:
但是,当我尝试从std::initializer_list
类中的数据成员或基对象构造它时,它不起作用:
gcc 4.6 的错误:
我怎样才能让它工作,以便我的包装类可以使用初始化列表进行初始化,如下所示:
c++ - 分配给结构映射的语法
G++ (4.6) 接受 C++03 中的这种赋值语法,但抱怨“扩展初始化语法仅在 C++0x 中可用”(释义)。我知道我可以创建一个按顺序接受值的构造函数,但我想知道这种语法是否可以接受(没有 C++0x),或者 G++ 是否只是让我满意,因为我对 C+ 非常焦虑+0x。
用 clang++ 编译甚至不允许它(w/C++0x,我假设缺少初始化列表),说“预期的表达式”,这基本上意味着“这到底是什么?”,甚至当我使用构造函数(上面注释掉),它会抛出错误。
摘要:所以基本上,正确的语法是什么,我可以使用初始化列表格式(在 C++03 或 C++0x 中)吗?