gpt4 book ai didi

c++ - 返回 vector 比通过引用传递慢吗?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:12:33 25 4
gpt4 key购买 nike

在过去,我们被训练使用通过引用传递的结果参数,以避免不必要地复制数据。

然而,对于更智能的编译器——尤其是 C++11 的扩展,是否仍然需要

具体来说,现代 C++11/C++14 编译器在 2018 年是否有任何理由(仍然)使用

void Filter(vector<CObject*> &elements, vector<CObject*> &outElements);

而不是简单地返回 vector ,即

vector<CObject*> Filter(vector<CObject*> &elements);

提前感谢所有见解!

最佳答案

and particular the extensions to C++11 is this still required?

没有。在最好的情况下,RVO (返回值优化) 将启动,这将完全消除任何复制/移动。

在最坏的情况下,对象将被移出函数。移动 std::vector非常便宜(与仅几次指针交换相比)。

这是因为表达式 Filter(some_input)std::vector<CObject*> 类型的右值 , 和 std::vector的构造函数有一个接受右值引用的重载:see (6) here .

关于c++ - 返回 vector 比通过引用传递慢吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48824076/

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