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

c++ - 编译器的大括号初始化器列表与类型 `std::initializer_list` 的耦合程度如何?

如果没有 C++ 标头,我可以达到相同的效果<initializer_list>吗?

是否class initializer_list必须居住namespace std(编译器是否需要这个)?

我对适用于五巨头(GCC、MSVC、英特尔、Clang、Comeau)的解决方案感到满意

0 投票
3 回答
2752 浏览

c++ - 通过 C++ 中的模板参数传递类构造函数

我知道函数可以传递template参数,我可以像这样传递类构造函数吗?

更新: 我想这样做的全部原因是我可以在内存池中选择构造函数,并且我想要分配的类中没有任何代码更改(在这种情况下class A

0 投票
6 回答
5411 浏览

c++ - 无法分配或复制 iostream 对象?

iostream和其他流类实际上不是类,而是typedefs,对吗?

这就是问题所在,我试图istream在初始化列表中初始化一个对象,但不幸的是我得到了一个错误,代码如下:

无法用 g++ 编译,错误:

我搜索了SO,发现,iostream cannot be assigned or copy. 但是为什么我不能在初始化列表中对其进行初始化呢?

因为我认为,初始化列表将调用对象的构造函数/复制构造函数,对吗?

0 投票
1 回答
651 浏览

c++ - 初始化器列表作为 operator[] 的参数

这个问题与这里讨论的问题有关。

我尝试使用初始化列表来创建要传递给operator[].

我的编译器(GCC 4.6.1)抱怨:

这应该是有效的 C++11 吗?

有趣的是,当使用operator()而不是operator[]它时。

0 投票
1 回答
2040 浏览

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. 另请参阅此问题

0 投票
3 回答
123 浏览

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.

0 投票
2 回答
3264 浏览

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_listFDIS 的 8.5.4.2,在基于范围的 for 中使用初始化列表是否构成“使用 --- 甚至是未命名类型的隐式使用”?

0 投票
3 回答
147 浏览

c++ - 不理解 Bruce Eckel 在其第 624 页上的“Thinking in C++”中的以下评论(粗体)。1

“请注意,构造函数不是默认构造函数;它们每个都有一个 int 参数。参数本身没有标识符;它存在的唯一原因是强制您显式调用初始化列表中的构造函数

0 投票
1 回答
777 浏览

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:

  1. As is (member assignment in a constructor & custom copy constructor):

    /li>
  2. Using constructor initializer list & custom copy constructor:

    /li>
  3. 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.
0 投票
1 回答
3425 浏览

c++ - 初始化列表中的 std::array 初始化器列表初始化

尽管我非常喜欢 C++11 中的新特性,但有时我觉得我错过了它的一些微妙之处。

初始化 int 数组工作正常,初始化 Element2 向量工作正常,但初始化 Element2 数组失败。我认为正确的语法应该是未注释的行,但初始化尝试对我来说都没有成功。

我在 MinGW 下的 g++ 4.6.1 和 4.6.2 上试过这个。

我应该如何正确地初始化这个数组?是否可以?