为什么没有std::initializer_list
内置核心语言?
在我看来,它是 C++11 的一个非常重要的特性,但它没有自己的保留关键字(或类似的东西)。
相反,initializer_list
它只是标准库中的一个模板类,它具有来自编译器处理的新花括号初始化列表语法的特殊隐式映射。 {...}
乍一看,这个解决方案很hacky。
这是现在实现 C++ 语言新增功能的方式吗:通过某些模板类的隐式角色而不是通过核心语言?
请考虑以下示例:
widget<int> w = {1,2,3}; //this is how we want to use a class
为什么选择一个新班级:
widget( std::initializer_list<T> init )
而不是使用类似于任何这些想法的东西:
widget( T[] init, int length ) // (1)
widget( T... init ) // (2)
widget( std::vector<T> init ) // (3)
- 一个经典的数组,你可以在
const
这里和那里添加 - 语言中已经存在三个点(var-args,现在是可变参数模板),为什么不重用语法(并让它感觉是内置的)
- 只是一个现有的容器,可以添加
const
和&
它们都已经是语言的一部分。我只写了我的 3 个最初的想法,我相信还有很多其他的方法。