在我在 SO 上看到的几乎每一篇涉及 a 的帖子中std::initializer_list
,人们都倾向于std::initializer_list
按值传递 a。根据这篇文章:
https://web.archive.org/web/20120707045924/cpp-next.com/archive/2009/08/want-speed-pass-by-value/
如果要复制传递的对象,则应按值传递。但是复制 astd::initializer_list
不是一个好主意,因为
复制 a
std::initializer_list
不会复制底层对象。在原始初始化列表对象的生命周期结束后,不能保证底层数组存在。
那么为什么它的一个实例通常是按值传递而不是通过,例如const&
,保证不会产生不必要的副本?