Gha*_*ani 12 c++ stdinitializerlist
的建议实施std::initializer_list的标准和C ++编程语言很简单。简单我的意思是没有什么奇怪的。
但是在 Compilers 的实现中事情变得复杂std::initializer_list,例如,GCC 有一个私有构造函数 for std::initializer_list,上面有一条注释说:'编译器可以调用私有构造函数。'。在这里eerorika回答:std::initializer_list是特别的。所以我在编译器源代码中寻找它:
我不明白为什么我们需要一个特殊的私有构造函数?前段时间我想转换std::vector<T>为std::initializer_list<T>.
它std::initializer_list是实际初始化列表的具体化,它的构造函数只是private为了确保没有人能够调用它(当然编译器除外),这可以防止人们std::initializer_list错误地使用。
正如StoryTeller所提到的;有一个gsl::span(或std::span在 C++20 中)用于连续范围抽象目的。但看来你试图(滥用)使用std::initializer_list它。
(您不能这样做,因为这只是初始化的支持类型{...}。)
来自评论:
...难道不能直接由编译器本身处理吗?我的意思是像它的新关键字之类的东西?
好吧,一个新的关键字可能会破坏现有的代码,但std命名空间是一个非常安全的地方(用于防止冲突)。