c++11 右值,右值引用,移动语义,完美转发
  1z4DPON8I3dd 2023年12月22日 77 0

左值是指在内存中有确定位置并且可以被取地址的表达式,它通常指代一个具有持久性(Permanent)和唯一性(Identity)的对象 右值是指表示值的表达式,它通常是一个临时的、没有持久性和唯一性的对象或字面值常量 右值分为:纯右值(字面常量)和将亡值(更侧重于自定义类型的函数的返回值,表达式的返回值)。

当构造传左值,就走拷贝构造,当构造传右值,就走移动构造。

对于左值,我们后续还要使用,所以只能进行深拷贝,完成拷贝构造。

但对于右值(将亡值),可以直接进行资源的交换,将this和将亡值交换资源。

右值引用主要用于以下两个目的:

转移语义(Move Semantics): 右值引用允许我们将资源(如动态分配内存、文件句柄等)从一个对象转移到另一个对象,而无需进行深拷贝。这通过在拷贝构造函数和赋值运算符中定义右值引用参数来实现。转移语义可以提高性能并减少不必要的内存分配和复制操作。

完美转发(Perfect Forwarding): 右值引用还使得函数能够接受任意类型的参数,并将其转发给其他函数,同时保持原始参数的值类别(左值或右值)。这在泛型编程和模板函数中特别有用

在需要的场景使用移动语义代替拷贝语义; 模板编程中,如果需要透传参数,那么需要使用完美转发。

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年12月22日 0

暂无评论

1z4DPON8I3dd