当我想要一个函数返回一个容器时:
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);
难道我的努力没有意义,因为我可以确定编译器 总是使用返回值优化?
最佳答案
没有意义。你提到的RVO类型称为命名RVO(NRVO),大多数编译器都实现了它。
无论如何,在 C++11 中,vector
具有移动构造函数,因此即使 NRVO 不适用,它仍然会被移动,而不是被复制。
关于c++ - 返回值优化 : ho can I avoid copy construction of huge STL containers.,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33562810/