std::initializer_list内置核心语言?在我看来,它是C++ 11的一个非常重要的特性,但它没有自己的保留关键字(或类似的东西).
相反,initializer_list它只是来自标准库的模板类,它具有来自编译器处理的新braced-init-list语法的特殊隐式映射. {...}
起初认为,这个解决方案非常黑客.
这是现在实现C++语言新增功能的方式:通过某些模板类的隐式角色而不是核心语言?
请考虑以下示例:
widget<int> w = {1,2,3}; //this is how we want to use a class
Run Code Online (Sandbox Code Playgroud)
为什么选择了新课程:
widget( std::initializer_list<T> init )
Run Code Online (Sandbox Code Playgroud)
而不是使用类似于以下任何想法的东西:
widget( T[] init, int length ) // (1)
widget( T... init ) // (2)
widget( std::vector<T> init ) // (3)
Run Code Online (Sandbox Code Playgroud)
const这里和那里添加const和&所有这些都已经成为语言的一部分.我只写了我的第一个想法,我相信还有很多其他方法.
通过传递多个参数是否::std::initializer_list比可变参数函数模板方法有任何优势?
在代码中:
template <typename T> void f(::std::initializer_list<T> const);
template <typename ...A> void f(A&& ...args);
Run Code Online (Sandbox Code Playgroud)
请注意,A...也可以通过 SFINAE 或将类型限制为单一类型static_assert()。参数可以通过......