既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上C C++开发知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新
[]( )去引用
----------------------------------------------------------------------
`std::remove_reference<T>`可以去除T的引用
T: int&& -->int;
T: int& --> int;
[]( )引用折叠
-----------------------------------------------------------------------
当模板类型是引用类型,而且函数参数是模板参数的引用的时候会发生引用折叠。
如`void func(T&&) ---> 当T==int&`.
> A&& & 折叠成 A&
> A& & 折叠成 A&
> A& && 折叠成 A&
> A&& && 折叠成 A&&
也就是说引用类型和函数参数类型只要有一方为左值引用,就折叠成左值引用;如果双方都是右值引用,才折叠成右值引用。
[]( )move
-----------------------------------------------------------------------
move的作用是将 **左值或者右值** 强制转换成 **右值引用类型**。从而可以把左值或右值参数传入相应的函数。
template
typename remove_reference<_T>::type&& move(T&& _Arg)
{
return static_cast<typename remove_reference<_T>::type<T>&&>(_Arg);
}
如何工作:
参数T&&保证左值(普通变量,左值引用,右值引用),右值(临时对象)都会进这个函数。
> return:
> 普通变量 --> 临时对象(函数返回值)
> 临时对象 --> 临时对象(函数返回值)
> 左值引用 --> 右值引用
> 右值引用 --> 右值引用
[]( )forward
--------------------------------------------------------------------------
forward是完美转发,保持变量原有的左右值属性。右值参数–>赋值右值引用 --> 右值引用是变量(左值)–> 参数从右值变左值,调相应左值函数。
通过forward。右值参数–>赋值右值引用 --> 右值引用是变量(左值)–>forward将右值引用转成右值–> 参数为右值,调相应左值函数。
void f(int&& i)
{
cout << "r ref" << endl;
}
void f(int& i)
{
cout << "l ref" << endl;
}
void warp(int&& i)
{
f(i);
}
void warp1(int&& i)
{
f(forward<int>(i));
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上C C++开发知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新
95%以上C C++开发知识点,真正体系化!**
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新