【发布时间】:2013-07-23 07:03:43
【问题描述】:
在我在 SO 上看到的几乎每一篇涉及std::initializer_list 的帖子中,人们倾向于按值传递std::initializer_list。根据这篇文章:
https://web.archive.org/web/20120707045924/cpp-next.com/archive/2009/08/want-speed-pass-by-value/
如果要复制传递的对象,则应按值传递。但是复制std::initializer_list 不是一个好主意,因为
复制
std::initializer_list不会复制底层对象。 底层数组在生命周期后不保证存在 原来的初始化列表对象已经结束。
那么为什么它的一个实例通常是按值传递而不是通过 const& 来保证不会产生不必要的副本?
【问题讨论】:
-
据我了解,编译器识别出常见的“按值返回”习语并将其优化为“移动”,这实际上在其实现中不涉及任何内存复制。
-
@MatthewD 不过我们不是说要回到这里。