c++ - 返回标准容器会导致容器内容的拷贝吗?

标签 c++ optimization stl containers standard-library

如果我有一个返回 STL 容器的函数,我是否会得到标准容器全部内容的拷贝?

例如这是:

void Foo( std::vector< std::string >* string_list );

比这更好:

std::vector< std::string > Foo();

容器里装的东西重要吗?例如会返回这样的容器:

struct buzz {
    int a;
    char b;
    float c;
}

std::map< int, buzz > Foo();

比这更昂贵的操作:

std::map< int, int > Foo();

谢谢, 保罗H


编辑: 这是 C++03。遗憾的是,C++0x 解决方案是 Not Acceptable 。

编辑2: 我正在使用 Microsoft Visual Studio 2008 编译器。

最佳答案

C++03 可能会进行(命名的)返回值优化(谷歌 RVO 和 NRVO)。

如果该优化不适用,C++0x 将执行 move semantics .

关于c++ - 返回标准容器会导致容器内容的拷贝吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5034631/

相关文章:

c++ - 缺少的#include是否有可能在运行时中断程序?

c++ - 如何预定义 <atomic> 变量?

algorithm - 组合优化

performance - ORM 采用的优化

C++如何管理连续动态数组的迭代器

c++ - C++编译错误已自行修复(试图找出原因)

c++ - Win32 自定义文本框

python - 在 Python 中使用 Pyomo 库的强对偶约束

c++ - 从 vector C++ 返回结构元素

C++ vector 源代码