c – 返回的向量比通过引用传递的慢吗?

在过去,我们接受了培训,使用通过引用传递的结果参数,以避免不必要地复制数据.

然而,对于更聪明的编译器 – 特别是C 11的扩展是否还需要?

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

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

而不是简单地返回矢量,即

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 *>的rvalue,而std :: vector的构造函数具有接受rvalue引用的重载:see (6) here.

相关文章

/** C+⬑ * 默认成员函数 原来C++类中,有6个默认成员函数: 构造函数 析构函数 拷贝...
#pragma once // 1. 设计一个不能被拷贝的类/* 解析:拷贝只会放生在两个场景中:拷贝构造函数以及赋值运...
C类型转换 C语言:显式和隐式类型转换 隐式类型转化:编译器在编译阶段自动进行,能转就转,不能转就编译...
//异常的概念/*抛出异常后必须要捕获,否则终止程序(到最外层后会交给main管理,main的行为就是终止) try...
#pragma once /*Smart pointer 智能指针;灵巧指针 智能指针三大件//1.RAII//2.像指针一样使用//3.拷贝问...
目录&lt;future&gt;future模板类成员函数:promise类promise的使用例程:packaged_task模板类例程...