为什么有一个构造函数同时接受initializer_list和参数包

时间:2017-10-01 03:06:17

标签: c++ c++17

我注意到std::optionalstd::variantstd::any都有构造函数同时接受 std::initializer_listargs...

std::optional ctor (7)

std::any ctor (6)

std::variant ctor (8)

为什么会有这样的构造函数?它支持哪些用例?

1 个答案:

答案 0 :(得分:1)

好吧,这是一个愚蠢的问题。

感谢大家帮我编辑问题。

使用initializer_list和参数包都很好。

例如,std :: vector有一个接受initializer_list和allocator的构造函数。

我测试过,这似乎就是答案。

std::variant<std::vector<int,std::allocator<int>>> v(std::in_place_index<0>,{1,2,3,4},std::allocator<int>());

for(int i: std::get<0>(v))
{
    std::cout<<i<<std::endl;
}

还有一个问题,为什么必须将initializer_list与其他模板参数分开。我想我可以在其他地方找到它。