【发布时间】:2015-01-25 06:08:58
【问题描述】:
在我的环境中,std::initializer_list 被实现为指向第一个元素的指针和大小。仍然在我的特定设置中,我能够观察到:
- 底层数据分配在当前函数帧中(因为指向第一个元素的指针是这样说的)
- 从函数中按值返回
initializer_list不会更改指针的值(导致数据未与 initializer_list 一起复制的结论)。
这使得复制 initializer_list 变得不安全,如果副本的寿命比原始对象长。
- C++ 标准的后续版本是否会保留此行为?
- 同样重要的是,这种行为背后的基本原理是什么? (今天我真的很难受,所以我会天真地说这违背了“最小惊讶”的心爱原则)
【问题讨论】:
-
没有。永远不要持有
initializer_list。拒绝吧。如果你需要这样做,那你就错了。那不是它的用途。它是为了初始化而不是作为某个东西的持久句柄。 -
我听说过的最好的说法是:
initializer_list不是一个容器,不要把它当作一个容器来对待。
标签: c++ c++11 c++14 initializer-list