【发布时间】:2015-11-06 08:50:29
【问题描述】:
当我想要一个函数返回一个容器时:
vector<T> func(){
vector<T> result;
...
return result;
}
按以下方式使用:
vector<T> result = func();
为了避免复制我的容器的开销 我经常编写函数,以便它只返回接受一个 容器的非常量实例。
void func(vector<T>& result){
result.clear();
...
result;
}
按以下方式使用:
vector<T> result;
func(result);
我的努力是否毫无意义,因为我可以确定编译器 总是使用返回值优化?
【问题讨论】:
-
从 C++11 开始你的努力是没有意义的,直到 C++11 是正确的方法。
-
即使在 C++03 中,您也应该使用您的第一个代码示例。
-
您假设如果应用 RVO,它将与其他方式一样有效。情况并非总是如此。
-
@101010 即使在 C++11 之前,将其称为“正确的方法”也是有问题的……
-
@TheParamagneticCroissant 很公平,但在那个年代就是这样。