gpt4 book ai didi

c++ - 为什么 `std::initializer_list`经常按值传递?

转载 作者:太空宇宙 更新时间:2023-11-04 13:30:58 25 4
gpt4 key购买 nike

几乎在我看到的每一篇涉及 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 并不是一个好主意,因为

Copying a std::initializer_list does not copy the underlying objects.The underlying array is not guaranteed to exist after the lifetime ofthe original initializer list object has ended.

那么为什么它的实例经常按值传递而不是按 const& 来保证不会产生不必要的拷贝?

最佳答案

它是按值传递的,因为它很便宜。 std::initializer_list 是一个瘦包装器,很可能实现为一对指针,因此复制(几乎)与通过引用传递一样便宜。此外,我们实际上并没有执行复制,我们(通常)执行的是移动,因为在大多数情况下,参数无论如何都是从临时构造的。但是,这不会对性能产生影响——移动两个指针与复制它们一样昂贵。

另一方面,访问拷贝的元素可能更快,因为我们避免了一次额外的解引用(引用的解引用)。

关于c++ - 为什么 `std::initializer_list`经常按值传递?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31484015/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com