右值和forward
看实例 http://www.wjhsh.net/KillerAery-p-12802771.html
主要处理深拷贝问题。。
一、右值
1、 int&& b = 6; //这个时候只能右值引用 2、 template<typename T> void printValue( T&& t) { cout << "r-value: " << t << endl; //t = 0; 会出错 } 函数里面的T&& ,即可也接收左值也可以接收右值,除非被重写,就是再定义一个T&的 3 template<typename T> void printValue(const T&& t) //这个时候只能接收右值 ,连const的左值也不行;与容器的const类似 { cout << "r-value: " << t << endl; t = 0; }
二、完美转发
就是再传参时,还能是右值
forward的由来:保持住参数的右值属性。
模板函数中的推导类型,作为另一函数的参数时,不管实参是什么类型,作为另一个参数的实参时,都变成了左值。
因为C++里规定函数的形参就是左值,不管调用侧的实参是否是右值。
https://www.cnblogs.com/xiaoshiwang/p/9589008.html
三move重要
move的本质就是帮助编译器选择重载函数, 告诉编译器"请尽量把此参数当做右值来处理"
但是要清楚机制的时机,主要是拷贝构造函数的时候
void testfun(HasPtrMem a){}; void main(){ HasPtrMem a; testfun(a); //调用拷贝构造函数 testfun(std::move(a));//调用移动构造函数 }
但是感觉通过传引用更好啊
void testfun1(HasPtrMem& a){};
testfun1(a);
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通