相关疑难解决方法(0)

在C++中,从函数返回向量仍然是不好的做法吗?

简短版本:在许多编程语言中返回大型对象(例如向量/数组)是很常见的.如果类有移动构造函数,这个样式现在在C++ 0x中是否可以接受,或者C++程序员认为它是奇怪/丑陋/可憎的?

长版本:在C++ 0x中,这仍然被认为是不好的形式?

std::vector<std::string> BuildLargeVector();
...
std::vector<std::string> v = BuildLargeVector();
Run Code Online (Sandbox Code Playgroud)

传统版本如下所示:

void BuildLargeVector(std::vector<std::string>& result);
...
std::vector<std::string> v;
BuildLargeVector(v);
Run Code Online (Sandbox Code Playgroud)

在较新的版本,则返回值从BuildLargeVector是一个rvalue,所以v将使用的移动构造函数来构造std::vector,假设(N)RVO不会发生.

甚至之前的C++ 0x第一形式常常是因为(N)RVO"有效"的.但是,(N)RVO由编译器决定.现在我们有rvalue引用,保证不会发生深度复制.

编辑:问题实际上与优化无关.所示的两种形式在现实世界的节目中具有几乎相同的性能.然而,在过去,第一种形式可能具有数量级更差的性能.因此,第一种形式是C++编程中的主要代码味道很长一段时间.不再了,我希望?

c++ coding-style return-value-optimization c++11

102
推荐指数
5
解决办法
4万
查看次数