C++ 11之 && 右值引用

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

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

这里写图片描述 
可以看出,传入不同类型的值,编译器自动识别调用了不同的函数。 
右值引用是用来支持转移语义的。转移语义可以将资源 ( 堆,系统对象等 ) 从一个对象转移到另一个对象,这样能够减少不必要的临时对象的创建、拷贝以及销毁,能够大幅度提高 C++ 应用程序的性能。临时对象的维护 ( 创建和销毁 ) 对性能有严重影响。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值