C++ 11之 && 右值引用

[复制链接]
 楼主| keer_zu 发表于 2023-2-18 11:01 | 显示全部楼层 |阅读模式
本帖最后由 keer_zu 于 2023-2-18 11:09 编辑


最近在看cocos2dx的源代码,发现了一个模板类有一个奇怪的语法&&:

  1. inline RefPtr(RefPtr<T> && other)
  2.     {
  3.         _ptr = other._ptr;
  4.         other._ptr = nullptr;
  5.     }


 楼主| keer_zu 发表于 2023-2-18 11:03 | 显示全部楼层
本帖最后由 keer_zu 于 2023-2-18 11:04 编辑

刚开始一阵犯晕,一个类型Ref<T>和一个似乎是形参的other与操作会得出一个什么?显然这种理解是错误的。。
“&&”还有一种含义是右值引用,表示形参是一个右值。
**左值 右值:**
int a = 0;
a是一个左值,左值是一个变量,可以被引用和多次使用。0是一个右值,不可以被引用。
左值一般是非临时变量,可以多次使用。右值只在当前表达式有效。
看一下右值引用的用法:

  1. class MyClassB
  2. {
  3. public:
  4.     void init(int & intval)
  5.     { cout<<"use & print"<<endl;};
  6.     void init(int &&intval)
  7.     { cout<<"use && print"<<endl;}
  8. };
  1. int main(void)
  2. {
  3.     int ae = 10;
  4.     MyClassB().init(10);
  5.     MyClassB().init(ae);
  6.     return 0;
  7. }

 楼主| keer_zu 发表于 2023-2-18 11:11 | 显示全部楼层
 楼主| keer_zu 发表于 2023-2-18 11:11 | 显示全部楼层
可以看出,传入不同类型的值,编译器自动识别调用了不同的函数。
右值引用是用来支持转移语义的。转移语义可以将资源 ( 堆,系统对象等 ) 从一个对象转移到另一个对象,这样能够减少不必要的临时对象的创建、拷贝以及销毁,能够大幅度提高 C++ 应用程序的性能。临时对象的维护 ( 创建和销毁 ) 对性能有严重影响。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:qq群:49734243 Email:zukeqiang@gmail.com

1478

主题

12912

帖子

55

粉丝
快速回复 在线客服 返回列表 返回顶部
个人签名:qq群:49734243 Email:zukeqiang@gmail.com

1478

主题

12912

帖子

55

粉丝
快速回复 在线客服 返回列表 返回顶部