在我的环境中,std::initializer_list
被实现为指向第一个元素和大小的指针。仍然在我的具体设置中,我能够观察到:
initializer_list
不会更改指针的值(导致数据不会与initializer_list一起复制)。如果副本可以比原始对象更长,则复制initializer_list
,会造成不安全。
答案 0 :(得分:8)
从C ++ 11标准,18.9 [support.initlist]:
2 类型为initializer_list的对象提供对const E类型对象数组的访问。[注意:一对指针或指针加上一个长度将是initializer_list的明显表示。 initializer_list用于实现8.5.4中指定的初始化列表。 复制初始值设定项列表不会复制基础元素。 - 结束注释]
就像指点对象一样。您还可以使指针比对象更活跃。如果你想安全地做到这一点,请改为采用/存储一个元素向量。
复制元素会使它变得昂贵,因此没有人会使用它。 documentation available清楚地说明了它的作用。
修改强>
这是Stroustrup对initializer_list
:N2100的提案。阅读它可能会启发它的设计决策。