2016-11-26 53 views
1

我想知道使用std::initializer_list有什么好处,它的用途是什么。在C++中std :: initializer_list的好处11

我遇到以下:Why is list initialization (using curly braces) better than the alternatives?

和理解的是,“非狭窄”的效果,但我实在看不出它是多么有益。

我可以发现的另一个好处是初始化时的相对易用性(例如初始化有多个成员的类时),但除此之外我没有看到任何重大改进,这使得使用initializer_list进行初始化变得很好实践,特别是在效率方面。

+1

所以你的问题实际上是*为什么std :: initializer_list的“非缩小”效果有益*? –

+0

确实,以及其他我可能不知道的好处是最受欢迎的。 – GoldenSpecOps

+1

我认为这将是两个不同的问题。第一个可能足够具体。然而,第二个会很奇怪,可能会重复。毕竟,其他问题有很多答案,解释了很多很多*的好处,那么您还会期望什么? –

回答

2

对于大多数实际用途,std::initializer_list给出了一个好处:能够初始化任意类型的对象。

缺乏狭窄是好的,但绝对由相形见绌到能够键入类似操作简单方便:

std::vector<int> foo { 1, 2, 3, 4}; 

而不是:

std::vector<int> foo; 
foo.push_back(1); 
foo.push_back(2); 
foo.push_back(3); 
foo.push_back(4); 

...或引发了大量的黑客攻击,主要基于滥用逗号运算符的超载来获得如下语法:

std::vector<int> foo; 
foo += (1, 2, 3, 4); 

是的,这可以在速度方面有一些实际的好处(举一个例子),因为向量将预先分配空间以防止在初始化期间从initializer_list重新分配。这显然是一件好事 - 但坦率地说,它很少成为交易者。如果intializer_list更方便但可能会比较慢一些,人们会反正使用它(在大多数情况下也是如此)。

相关问题