gpt4 book ai didi

c++ - 什么时候 const 引用比 C++11 中的按值传递更好?

转载 作者:IT老高 更新时间:2023-10-28 13:24:14 28 4
gpt4 key购买 nike

我有一些 C++11 之前的代码,我在其中使用 const 引用来传递像 vector 这样的大参数。一个例子如下:

int hd(const vector<int>& a) {
return a[0];
}

听说使用新的 C++11 功能,您可以按如下方式按值传递 vector 而不会影响性能。

int hd(vector<int> a) {
return a[0];
}

例如,this answer

C++11's move semantics make passing and returning by value much more attractive even for complex objects.

上述两个选项在性能方面是否相同?

如果是这样,什么时候使用选项 1 中的 const 引用比选项 2 更好? (即为什么我们仍然需要在 C++11 中使用 const 引用)。

我问的一个原因是 const 引用使模板参数的推导复杂化,如果它与 const 引用性能相同,则仅使用按值传递会容易得多。

最佳答案

按值传递的一般经验法则是,无论如何你最终都会制作一个拷贝。也就是说,而不是这样做:

void f(const std::vector<int>& x) {
std::vector<int> y(x);
// stuff
}

您首先传递一个 const-ref 并然后复制它,您应该这样做:

void f(std::vector<int> x) {
// work with x instead
}

这在 C++03 中部分正确,并且在移动语义中变得更加有用,因为当函数用右值调用。

否则,当您只想读取数据时,通过 const 引用传递仍然是首选且高效的方式。

关于c++ - 什么时候 const 引用比 C++11 中的按值传递更好?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24543330/

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