7
在C ++中,从函数返回向量仍然是不好的做法吗?
简短版本:通常以许多编程语言返回大对象(例如向量/数组)。如果该类具有move构造函数,那么C ++ 0x现在可以接受这种样式吗,还是C ++程序员认为它是怪异的/丑陋的/讨厌的? 长版:在C ++ 0x中,仍然认为这是错误的形式吗? std::vector<std::string> BuildLargeVector(); ... std::vector<std::string> v = BuildLargeVector(); 传统版本如下所示: void BuildLargeVector(std::vector<std::string>& result); ... std::vector<std::string> v; BuildLargeVector(v); 在较新的版本中,从返回的值BuildLargeVector是一个右值,因此将使用std::vector(N)RVO不发生的move构造函数构造v 。 甚至在C ++ 0x之前,由于(N)RVO,第一种形式通常也很“高效”。但是,(N)RVO由编译器决定。现在我们有了右值引用,可以保证不会进行深层复制。 编辑:问题实际上不是关于优化。所示的两种形式在现实程序中的性能几乎相同。过去,第一种形式的性能可能会降低几个数量级。结果,很长一段时间以来,第一种形式是C ++编程中的主要代码味道。我希望不再了吗?