std::initializer_list 在 c++11 中的好处
Benefits of std::initializer_list in c++11
我想知道使用 std::initializer_list
有什么好处,它有什么作用。
我遇到了以下情况:Why is list initialization (using curly braces) better than the alternatives?
并了解 "non-narrowing" 效果,虽然我看不出它有多大好处。
我发现的另一个好处是初始化时相对容易使用(例如初始化具有多个成员的 class 时),但除此之外我没有看到任何重大改进,这确实使使用 initializer_list 初始化是一种很好的做法,尤其是在效率方面。
对于大多数实际用途,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);
是的,这可以在速度方面带来一些切实的好处(例如),因为向量将预先分配 space 以防止在从 initializer_list
初始化期间重新分配。这显然是一件好事——但老实说,它很少能促成交易。如果 intializer_list 更方便但可能会慢一点,人们无论如何都会使用它(在大多数情况下这是正确的)。
我想知道使用 std::initializer_list
有什么好处,它有什么作用。
我遇到了以下情况:Why is list initialization (using curly braces) better than the alternatives?
并了解 "non-narrowing" 效果,虽然我看不出它有多大好处。
我发现的另一个好处是初始化时相对容易使用(例如初始化具有多个成员的 class 时),但除此之外我没有看到任何重大改进,这确实使使用 initializer_list 初始化是一种很好的做法,尤其是在效率方面。
对于大多数实际用途,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);
是的,这可以在速度方面带来一些切实的好处(例如),因为向量将预先分配 space 以防止在从 initializer_list
初始化期间重新分配。这显然是一件好事——但老实说,它很少能促成交易。如果 intializer_list 更方便但可能会慢一点,人们无论如何都会使用它(在大多数情况下这是正确的)。