gpt4 book ai didi

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

转载 作者:IT老高 更新时间:2023-10-28 11:54:58 24 4
gpt4 key购买 nike

短版:在许多编程语言中,返回大型对象(例如 vector/数组)很常见。如果类具有移动构造函数,这种风格现在在 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 返回的值是一个右值,因此 v 将使用 std::vector 的移动构造函数构造,假设 (N)没有发生 RVO。

甚至在 C++0x 之前,由于 (N)RVO,第一种形式通常是“高效的”。但是,(N)RVO 由编译器自行决定。现在我们有了右值引用,保证不会发生深拷贝。

编辑:问题实际上与优化无关。显示的两种形式在实际程序中的性能几乎相同。而在过去,第一种形式的性能可能会差一个数量级。结果,第一种形式在很长一段时间内都是 C++ 编程中的主要代码异味。我希望不再是了?

最佳答案

Dave Abrahams 对 the speed of passing/returning values 进行了相当全面的分析。 .

简短的回答,如果您需要返回一个值,则返回一个值。不要使用输出引用,因为编译器无论如何都会这样做。当然有一些警告,所以你应该阅读那篇文章。

关于c++ - 在 C++ 中,从函数返回 vector 仍然是不好的做法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3134831/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com