问题标签 [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++ - 编译器的大括号初始化器列表与类型 `std::initializer_list` 的耦合程度如何?
如果没有 C++ 标头,我可以达到相同的效果<initializer_list>
吗?
是否class initializer_list
必须居住namespace std
(编译器是否需要这个)?
我对适用于五巨头(GCC、MSVC、英特尔、Clang、Comeau)的解决方案感到满意
c++ - 通过 C++ 中的模板参数传递类构造函数
我知道函数可以传递template
参数,我可以像这样传递类构造函数吗?
更新:
我想这样做的全部原因是我可以在内存池中选择构造函数,并且我想要分配的类中没有任何代码更改(在这种情况下class A
)
c++ - 无法分配或复制 iostream 对象?
iostream
和其他流类实际上不是类,而是typedef
s,对吗?
这就是问题所在,我试图istream
在初始化列表中初始化一个对象,但不幸的是我得到了一个错误,代码如下:
无法用 g++ 编译,错误:
我搜索了SO,发现,iostream cannot be assigned or copy
. 但是为什么我不能在初始化列表中对其进行初始化呢?
因为我认为,初始化列表将调用对象的构造函数/复制构造函数,对吗?
c++ - 初始化器列表作为 operator[] 的参数
这个问题与这里讨论的问题有关。
我尝试使用初始化列表来创建要传递给operator[]
.
我的编译器(GCC 4.6.1)抱怨:
这应该是有效的 C++11 吗?
有趣的是,当使用operator()
而不是operator[]
它时。
c++ - 是否可以将数据作为 initializer_list 传递给 std::array 结构?
我有以下代码。基本上我想使用聚合初始化语法初始化非 POD 结构的 std::array。g++ 4.6 和 4.7(最新的每周快照)都无法编译代码。
海合会错误:
我的问题:上面的代码正确吗?似乎 std::array 是一个聚合,构造它的数据成员应该没有问题。也许这是GCC中的一个错误?
编辑:
OtherClass<2>{{ TheClass{1, 2}, TheClass{2, 3} }};
当然可以,但我不想使用它,因为我必须在很多地方构建类。C++11 应该支持省略TheClass
. 另请参阅此问题。
c++ - Strange code segment from c++
Reading code from other posts, I'm seeing something like this.
What does mem(0) {} does in this case, especially regarding the curly brackets? I have never seen this before and have no idea where else I would find out about this. I know that mem(0), would intialize mem to 0, but why the {}?
Thanks.
c++ - #包括需要在基于范围的情况下使用初始化列表吗?
最终的 C++11 标准包括对基于范围的 for 的规定,以便对本机数组“正常工作”,而无需包含<iterator>
或任何其他标头。据我所知,这首先在工作文件n2900中作为评论 UK 78 和 79 的结果得到解决。
该提案还包括#include <initializer_list>
在每个翻译单元中隐含的规定,例如,程序
即使不包括 . 也会符合标准<initializer_list>
。
但是,当从 C++11 中删除概念时,基于范围的 for 进行了修改,如n2930 所示。虽然保留了数组“正常工作”的规定,但没有提到初始化列表也是如此;事实上,各种标准库容器头文件的规范#include <initializer_list>
和 8.5.4.2 的最终文本对我来说是相反的。
据我所知,这与该主题的最终措辞非常接近。那么,关于最终标准,上述程序是否格式正确,或者我是否需要#include <initializer_list>
在基于范围的情况下使用它?换句话说,根据std::initializer_list
FDIS 的 8.5.4.2,在基于范围的 for 中使用初始化列表是否构成“使用 --- 甚至是未命名类型的隐式使用”?
c++ - 不理解 Bruce Eckel 在其第 624 页上的“Thinking in C++”中的以下评论(粗体)。1
“请注意,构造函数不是默认构造函数;它们每个都有一个 int 参数。参数本身没有标识符;它存在的唯一原因是强制您显式调用初始化列表中的构造函数”
c++ - Make a math vector class to be initializer list aware
I have a math vector class that is designed as follows:
I used to use the following to create a Vector3D-type variable on the stack:
I heard a can shorten this up with C++0x by implementing an initializer list constructor, so it will be possible to write something like:
What is the right way to implement this?
Update
The curly braces syntax really works out of the box for this class! Thanks for the answer and the comments!
Also, I did some synthetic performance tests trying to measure if constructor initializer list gives a speedup over member variable assignment in a constructor. Below is the results I've got with g++ 4.6.1:
As is (member assignment in a constructor & custom copy constructor):
/li>Using constructor initializer list & custom copy constructor:
/li>Using constructor initializer list & default copy constructor:
/li>
Some of the conclusions:
- The constructor initializer list does not give a speedup over member variable assignment in the case of the math vector class presented above.
- The custom copy constructor is more than 35% faster than the default copy constructor.
c++ - 初始化列表中的 std::array 初始化器列表初始化
尽管我非常喜欢 C++11 中的新特性,但有时我觉得我错过了它的一些微妙之处。
初始化 int 数组工作正常,初始化 Element2 向量工作正常,但初始化 Element2 数组失败。我认为正确的语法应该是未注释的行,但初始化尝试对我来说都没有成功。
我在 MinGW 下的 g++ 4.6.1 和 4.6.2 上试过这个。
我应该如何正确地初始化这个数组?是否可以?