为了账号安全,请及时绑定邮箱和手机立即绑定

“想要速度”有多真实?传递价值”

“想要速度”有多真实?传递价值”

C++
肥皂起泡泡 2019-12-26 09:38:58
如果我错了纠正我。说我有:struct X{    std::string mem_name;    X(std::string name)        : mem_name(std::move(name))     {}    ...};struct Y{    std::string mem_name;    Y(const std::string &name)        : mem_name(name)     {}    ...};在X的ctor中,name显然是传递给任何参数的副本X,X调用的动作ctor std::string来初始化mem_name,对吗?我们称其为X *上的复制然后移动。两种操作:COPY,MOVE。在Y的ctor中,name是const ref,这意味着没有元素的实际副本,因为我们直接处理Y需要创建对象的地方传递的参数。但是,我们复制name到初始化mem_name的Y; 一种操作:COPY。因此,它肯定应该快很多(对我而言更可取)?在斯科特·迈耶(Scott Meyer)的GN13演讲中(大约时间框架8:10和8:56),他谈到了“想要速度?按值传递”,我想知道传递参数(或精确的字符串)是否存在性能差异或损失)并通过引用传递值“以提高速度?”我知道以下事实:按值传递参数可能会很昂贵,尤其是在处理大数据时。也许(显然吗?)他的谈话中我缺少什么?
查看完整描述

3 回答

?
蝴蝶不菲

TA贡献1810条经验 获得超4个赞

如果您真的不介意在API中公开非引用(应该是在内部表示您将要复制/分配给定对象的标志),则可以使用副本。


复制省略比移动要快,并且如果不能删除(出于各种原因,例如从属函数调用的调用链太长),则C ++可以保证移动语义。


分享编辑


查看完整回答
反对 回复 2019-12-26
  • 3 回答
  • 0 关注
  • 429 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信