12

标准C++ 编程语言std::initializer_list中建议的实现很简单。简单地说,我的意思是没有什么奇怪的。 但是在 Compilers 的实现中事情变得复杂,例如,GCC 有一个私有构造函数,上面有一条注释,上面写着:'编译器可以调用私有构造函数。' . 这里eerorika回答说:很特别。所以我在编译器源代码中寻找它:
std::initializer_liststd::initializer_liststd::initializer_list

铛:

海合会:

而且我不明白为什么我们需要一个特殊的私有构造函数?我前段时间想转换std::vector<T>std::initializer_list<T>.

4

1 回答 1

5

std::initializer_list是实际初始化列表的具体化,它的构造函数private只是为了确保没有人能够调用它(当然除了编译器),这可以防止人们std::initializer_list错误地使用它。

正如StoryTeller所说;有一个gsl::span(或std::span在 C++20 中)用于连续范围抽象目的。但是您似乎尝试(ab)使用std::initializer_list它。
(你不能,因为那只是{...}初始化的一种支持类型。)


来自评论:

...难道不能直接由编译器本身处理吗?我的意思是它的新关键字?

好吧,一个新的关键字可能会破坏现有的代码,但std命名空间是一个非常安全的地方(用于防止冲突)。

于 2021-08-11T17:29:47.243 回答