c++右值引用与完美转发

本文探讨了C++中的左值和右值概念,重点讲解了右值引用如何减少对象拷贝以提高效率。通过std::move和std::forward的示例,解释了它们在移动语义中的作用,并介绍了通用引用的概念。通过理解这些,可以更好地优化C++代码性能。
摘要由CSDN通过智能技术生成

1、左值和右值的本质区别?

左值是保存在内存里面的,而且具有名字,很多地方都说左值是可以取地址的,所以也可以直观的说,左值是有名字的内存,比如下面这段代码中,**put(Test()) ;里面的Test(),它创建了一个Test对象,但是这个对象在内存里面是没有名字的,所以它是个右值,而Test reusable ;**中的 reusable在内存中的名字就是reusable,它是个左值

class Test {
   
public:
    int * arr{
   nullptr};

    Test():arr(new int[50]{
   1,2,3,4}) {
    
    	cout << "default constructor" << endl;
    }
    Test(const Test & t) {
   
        cout << "copy constructor" << endl;
        if (arr == nullptr) arr = new int[5000];
        memcpy(arr, t.arr, 5000*sizeof(int));
    }
    Test(Test && t): arr(t.arr) {
   
        cout << "move constructor" << endl;
        t.arr = nullptr;
    }
    
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值