在标准库中找到一个主要而明显的含义 - "用一个元素列表初始化一个集合":
std::vector<int> v = {1, 2, 3};
另一个含义可以在下面std :: bitset的链接后面找到 - &#34;单个值是从initializer_list&#34;的元素组合而成的。
标准库中的第三个例子是std :: piecewise_constant_distribution,但我不愿意说它有什么语义,而不是一个元素的集合。
std :: initializer_list构造函数的其他用例是什么?如果可能,请使用实际代码中的示例。
这实际上是关于课堂设计的问题
由于列表初始化的一些pecularities将std :: initializer_list构造函数添加到已存在的类easily an surprisingly be a breaking change,所以在编写新类时,您应该事先知道它是否需要std: :initializer_list构造函数。
所以,我试图通过写出std :: initializer_list构造函数的用例来模拟查看未来的能力。
主要问题是:我如何确定我的类可能会在未来编写正确的非std :: initializer_list构造函数时使用std :: initializer_list构造函数(对于用户来说并不奇怪)?
答案 0 :(得分:1)
我实际上在我当前的项目中使用这种技术。我有一个班级&#34; BaseMenu&#34;它需要在它的构造函数中初始化std :: vector,所以它有std :: vector作为它的参数。然后,我有继承BaseMenu的MainMenu,我告诉BaseMenu我想要的MainMenu是什么样的:
BaseMenu(std::vector<std::string>);
MainMenu::MainMenu():
BaseMenu({{"Play"},
{"Options"},
{"About"},
{"Quit"}})
真的很舒服&#34;。 PS:上面的模型是简化的,但它应该给出std :: initializer_list
的有用感答案 1 :(得分:1)
我认为intializer_list具有以下主要功能:
对于实际示例,您可能需要参考我的blog和ISOCPP信息。
修改强>
std :: initializer_list
的可能优点//1. Initialization Concept In A class
std::initializer_list<int> x{1,2,3,4,5};
std::vector<int> v(x.begin(), x.end());
//2.Better Type Safety and avoid narrow conversions scenario
std::vector<int> v{1, 2, 3.4, 4};
Compiler Output
narrowing conversion of ‘3.3999999999999999e+0’ from ‘double’ to ‘int’ inside { }
//3. Provide Const iterator type interface
std::initializer_list<int> ly{1,2,3,4,5};
auto itrs = ly.begin();
int* x = itrs;
Compiler Output
error: invalid conversion from ‘const int*’ to ‘int*’