2

如果没有 C++ 标头,我可以达到相同的效果<initializer_list>吗?

是否class initializer_list必须居住namespace std(编译器是否需要这个)?

我对适用于五巨头(GCC、MSVC、英特尔、Clang、Comeau)的解决方案感到满意

4

1 回答 1

4

它按照标准紧密耦合。它是一个围绕编译器构造的数组的包装器(尽管标准没有说明如何精确——GCC 使用带有指针和大小的构造函数,MSVC 使用带有两个点的构造函数)。是的,它必须在 namespacestd和 header 中<initializer_list>

您必须查看它们在您想要支持的每个编译器中使用的构造函数,并在您的版本中复制它,但是TBH,我看不出重点。

模板std::initializer_list没有预先定义;<initializer_list>如果在使用之前没有包含头文件std::initializer_list——即使是没有命名类型的隐式使用(7.1.6.4)——程序格式错误。

类型的对象std::initializer_list<E>是从初始化列表构造的,就好像实现分配了一个类型为 E 的 N 个元素的数组,其中 N 是初始化列表中的元素数。该数组的每个元素都使用初始值设定项列表的相应元素进行复制初始化,并且std::initializer_list<E>构造对象以引用该数组。

于 2012-01-06T18:35:35.883 回答