如果我有一个返回 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/