c++笔记记录1

对象的优化

1,不能返回局部的或者临时对象的指针和引用

​ 在函数里面返回临时对象的时候,返回类型不能是指针或者引用

2,函数调用,实参=》形参, 是初始化的过程

3,函数参数传递过程中,对象优先按引用传递,不要按值传递

4,函数返回对象的时候,应该优先返回一个临时对象,而不要返回一个定义过的对象

用临时对象拷贝构造一个新对象 Test t=Test(30), 相当于Test t(30)直接构造,且不用对临时对象的析构

Test GetObject(Test & t){
 int val=t.getData();
 /*
 	Test tmp(val);
 	return tmp;    //这里可以被优化拷贝构造和析构
 */
 return Test(val);
}

5,接收返回值是对象的函数调用的时候,优先按初始化的方式接收,不要按赋值的方式接收

Test t2=GetObject(t2); 这就跟Test t1 做一样的事情

6,右值引用

​ 左值:有内存,有名字 右值:没名字(临时变量),没内存

无法将左值绑定到右值引用 int &&c=a;

不能将一个左值引用绑定一个右值 int & c=20;//20没名字 是右值

但是const int & c=20;是可以成立的/* int tmp=20; const int &c =tmp;*/

int &&d=20;可以右值绑定到一个右值引用上

一个右值引用变量,本身是一个左值 ,只能用左值引用

int &f=d成立   int&&f=d不能成立

​ 右值引用参数的拷贝/赋值构造,直接通过修改指针mptr=str.mptr; 然后将原来的指针指控 str.mptr=nullptr;

相当于直接把资源给别人

​ 7,vec .push_back可以有左值引用和右值引用

8,std::move(),移动语义,将左值强转成右值引用类型

  1. CMyString& +&&=CMyString&

    CMystring&& +&&=CMyString&&

    函数模板的类型推演+引用折叠就可以有7的效果

  2. std::forward(val); 类型的完美转发,根据定义识别出来本身是左值还是右值

  • 7
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值