c++ - 返回值优化 : ho can I avoid copy construction of huge STL containers.

标签 c++ rvo

当我想要一个函数返回一个容器时:

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/

相关文章:

c++ - 如何使用 std::sort() 对指向值的 vector 进行排序?

C++ 类型转换与隐式构造函数

C++ 连续序列概念

c++ - 为什么 move 语义和 RVO 都没有按预期工作?

c++ - 使用 std::pair 优化返回值

cuda - 我可以相信 NVCC 可以优化返回类型中的 std::pair 吗?

c++ - 冒泡排序链表不排序

c++ - VS2008 C++ 编译器错误?

c++ - 函数返回的 RVO 和右值如何工作?

c++ - 回溯时如何避免输出参数?