返回标准容器会产生容器内容的副本吗?

Pau*_*ulH 4 c++ optimization containers stl standard-library

如果我有一个返回STL容器的函数,我会生成标准容器的全部内容的副本吗?

这是这样的:

void Foo( std::vector< std::string >* string_list );
Run Code Online (Sandbox Code Playgroud)

比这更好:

std::vector< std::string > Foo();
Run Code Online (Sandbox Code Playgroud)

容器里的东西是否重要?例如,会返回这样的容器:

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

std::map< int, buzz > Foo();
Run Code Online (Sandbox Code Playgroud)

比这更昂贵的操作:

std::map< int, int > Foo();
Run Code Online (Sandbox Code Playgroud)

谢谢,PaulH


编辑: 这是与C++ 03.遗憾的是,C++ 0x解决方案是不可接受的.

Edit2: 我正在使用Microsoft Visual Studio 2008编译器.

fre*_*low 6

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

如果该优化不适用,C++ 0x将移动语义.