当前位置: 首页 > news >正文

网站多少流量够用/搜索引擎优化简历

网站多少流量够用,搜索引擎优化简历,广州哪家公司做网站,外贸海外网站推广右值和左值的区别: 当一个对象被用作右值的时候,用的是对象的值(内容);当对象被用作左值的时候,用的是对象的身份(在内存中的位置)。左值与右值的根本区别在于是否允许取地址&运算符获得对应的内存地址。 C/C11中左值、左值引…

右值和左值的区别:

当一个对象被用作右值的时候,用的是对象的值(内容);当对象被用作左值的时候,用的是对象的身份(在内存中的位置)。左值与右值的根本区别在于是否允许取地址&运算符获得对应的内存地址。
C++/C++11中左值、左值引用、右值、右值引用的使用

std::move解析

std::move的唯一功能就是将一个左值引用强制转化为右值引用

	std::string str = "hello";std::vector<std::string> v;//调用拷贝构造函数v.push_back(str);//调用移动构造函数,掏空str,掏空后,不可以再使用strv.push_back(std::move(str));

std::move源码解析

std::move的函数原型定义:

template <typename T>
typename remove_reference<T>::type&& move(T&& t)
{return static_cast<typename remove_reference<T>::type &&>(t);
}

首先函数参数T&&是一个指向T类型的右值引用,通过引用折叠,将T&&传递过来的类型,右值保持不变,左值变成普通的左值引用,然后在通过remove_reference::type模板移除T&&,T&的引用,获取到具体的类型T

//原始的,最通用的版本
template <typename T> struct remove_reference{typedef T type;  //定义T的类型别名为type
};//部分版本特例化,将用于左值引用和右值引用
template <class T> struct remove_reference<T&> //左值引用
{ typedef T type; }template <class T> struct remove_reference<T&&> //右值引用
{ typedef T type; }   //举例如下,下列定义的a、b、c三个变量都是int类型
int i;
remove_refrence<decltype(42)>::type a;             //使用原版本,
remove_refrence<decltype(i)>::type  b;             //左值引用特例版本
remove_refrence<decltype(std::move(i))>::type  b;  //右值引用特例版本 

引用折叠,其实就是多个引用的意思,所有的引用折叠最终都代表一个引用,要么是左值引用,要么是右值引用
规则就是:
如果任一引用为左值引用,则结果为左值引用,否则为右值引用
比如 int& &&等价于int &
这个的应用场景主要为函数模板的推导
https://zhuanlan.zhihu.com/p/50816420

std::forward解析

在任何的函数内部,对形参的直接使用,都是按照左值进行的,比如:

template<typename T>
void func(T& t){std::cout<<"func(T& t)"<<std::endl;
}template<typename T>
void func(T&& t){std::cout<<"func(T&& t)"<<std::endl;
}template<typename T>
void printType(T&& t){func(t);
}
int main()
{int  i = 0;printType(i);printType(2);
}

这段代码的打印为:

func(T& t)
func(T& t)

那我们要怎么让调用的函数按我们的预期执行呢,答案就是使用std::forward:

template<typename T>
void printType(T&& t){func(std::forward<T>(t));
}

打印为:

func(T& t)
func(T&& t)

std::forward源码解析

template <class _Tp>
_Tp&&
forward(typename remove_reference<_Tp>::type& __t) _NOEXCEPT
{return static_cast<_Tp&&>(__t);
}template <class _Tp>
_Tp&&
forward(typename remove_reference<_Tp>::type&& __t) _NOEXCEPT
{return static_cast<_Tp&&>(__t);
}

首先通过remove_reference拿到_Tp的直接类型,如int类型

  • 对于第一个函数,通过remove_reference,t的类型是int&,再通过static_cast中的引用折叠,static_cast<_Tp& &&>,最终拿到的是左值引用
  • 对于第二个函数,通过remove_reference,t的类型是int&&,再通过static_cast中的引用折叠,static_cast<_Tp&& &&>,最终拿到的是右值引用

因此这样实现了完美转发

参考文档:
https://blog.csdn.net/daaikuaichuan/article/details/88371948

http://www.lbrq.cn/news/1085977.html

相关文章:

  • 济南建站模板/百度运营怎么做
  • 做h5网站的公司/网站做外链平台有哪些
  • 做好网站建设静态化/seo网络优化是做什么的
  • 行业用品网站怎么建设外链/微商引流一般用什么软件
  • 古建设计素材网站/宁波核心关键词seo收费
  • 建设电影网站赚钱/培训心得体会800字
  • 做网站要钱的吗/新网域名
  • h5做招聘网站可以吗/免费产品推广软件
  • dw怎么做网站首页/南宁seo优势
  • 贵阳网页网站制作/千锋教育培训多少钱
  • 大连网站设计公司/企业员工培训总结
  • 建设网站必须要服务器吗/企业网站建设模板
  • 枣阳网站开发公司哪家好/惠州seo代理计费
  • wordpress 站点语言/一站式网络营销
  • 网站做研究生毕业论文/营销型网站建设的价格
  • 正规的徐州网站建设/百度推广登录平台app
  • 宁国做网站/平台广告推广
  • 金融互助平台网站制作/站长工具忘忧草社区
  • 网站专题设计欣赏/网站如何在百度刷排名
  • 区块链开发平台/seo人人网
  • 新闻门户网站什么意思/百度信息流推广平台
  • 一个网站做各种好玩的实验/企业seo网络营销
  • 网站直播用php怎么做的/百度搜索大数据
  • 网站对接微信接口/线上销售平台
  • 怎样做班级网站/搜索引擎营销方式
  • 自己编写网站/百度快照什么意思
  • 网站建站东莞/百度网站优化
  • 网站开发怎么自学/seo网站推广计划
  • 网站建设和管理规则/网站seo的优化怎么做
  • 阿里云买域名后怎么做网站/刷关键词排名seo软件软件
  • 终结集成乱局:模型上下文协议(MCP)如何重构AI工具生态?
  • 新能源行业B端极简设计:碳中和目标下的交互轻量化实践
  • Vue vuex模块化编码
  • 微分方程入门之入门之入门,纯笔记
  • GO 从入门到精通2
  • 从稀疏数据(CSV)创建非常大的 GeoTIFF(和 WMS)