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

wordpress电影网站wordpress评论输入框

wordpress电影网站,wordpress评论输入框,文字云网站,如何设定旅游网站seo核心关键词左值与右值 序言概念左值和右值的划分理解右值引用常量左值引用与右值引用 移动语义引用折叠完美转发 参考资料 序言 虽然平常都算是了解左值#xff0c;右值的用法#xff0c;但是好记性不如烂笔头#xff0c;记下来供大家评鉴#xff0c;有错改错#xff0c;有善赞善右值的用法但是好记性不如烂笔头记下来供大家评鉴有错改错有善赞善也是对于自己知识的一次梳理。 为什么要分清楚左值和右值这是因为在理清楚左值和右值合适为其设置适合的用法能够有效减少资源开销。 但是对于一些POD类型的资源那就无所谓左值右值了因为拷贝即移动移动即拷贝。 接下来我以左值和右值的讨论依次简单讲解左值和右值的概念右值引用移动语义引用折叠完美转发。明确左值和右值理清楚后可以使用的主要用法。 注1. 开始看下面之前需要注意的是这些除了专业名词之外基本都是基于个人理解去通俗诠释概括的想直接看专业且全面的概念就找末尾的参考资料看。 2.以下有比较多的专业词汇初学者建议慢慢看和查询拓展。 概念 左值和右值的划分理解 左值(lvalue)和右值(rvalue)是C11之前的概念但是也通用到后面。 C11及之后划分为 泛左值(glvalue)、将亡值(xvalue也称亡值消亡值)和纯右值(prvalue) 左值(C11之前)赋值运算“”左边的变量 右值(C11之前)赋值运算“”右边的表达式左值(C11及之后)非将亡值的泛左值有地址的变量 右值(C11及之后)纯右值或者将亡值生命周期在表达式里。int a 15 29; std::cout a; // 0xeffc40 std::cout (15 29); //error: Cannot take the address of an rvalue of type int std::cout xzz; //0xa16444以简单的例子这个a承载类型的值自身是有地址的可以取地址值这个就是左值。 15 29这个表达式的结果是纯右值不能取地址值。 注顺带一提许多普通常量都是纯右值但是字符串不是是左值因为普通常量都是可以用普通的机器码就可以表示其值但是字符串无法合适表示所以将其放置在常量区分配内存专门存放。 想必想了解左值和右值的人估计都看过这个图 或者是类似的基本都是说将亡值是泛左值和右值的交集。 但是这其实是容易让人摸不着头脑的但是本质角度上又是能说得过去的。 1. 将亡值被包含在右值这边是因为其的 生命周期和右值是一样 的都在一个表达式里面。 2. 将亡值被包含在泛左值这边是因为其是 匿名对象有地址和左值是一样 的。而上述也引申出了怎么判断将亡值。 将亡值生命周期在一个表达式里且是匿名对象有地址。C17的临时量实质化也是将亡值。 . 右值引用 右值引用T 顾名思义是引用右值的无论是纯右值还是将亡值。 右值引用是C11引入的值得注意的是右值引用的变量是个左值。 因为其是完全符合左值定义的众所周知引用本质上是一种特殊的指针可以这么认为指针指向的值是右值但是指针本身并不是右值。 所以你如果想右值引用 右值引用的变量 这样是不行的 int a 5; // 编译正常可以随意右值引用纯右值 int b a; // 编译错误右值引用的目的是延长将亡值的生命周期减少资源开销或者是为了移动语义服务使其进行资源转移。 struct AA {}; AA createAA() {return AA(); } int main() {AA a createAA(); }右值引用AA a接纳了本来表达式结束就要释放掉资源的匿名对象AA() 并可以任意更改匿名对象的资源。 常量左值引用与右值引用 在C11之前负责右值引用(T )功能的是常量左值引用(const T )只不过和右值引用相比常量左值引用无法修改其值且只能用于拷贝语义不能用以移动语义。 可以看出来常量左值引用和右值引用做的事情是一样的。 顺带一提不建议用右值引用去引用POD类型的纯右值因为纯右值要想被右值引用就得先压栈地址才能给其引用。 从开销上看不如直接普通的赋值。 就算单纯只看条数右值引用用了3条普通赋值才用了1条开销一目了然。 . 移动语义 移动语义(Move Semantics)是 C11 引入的一项重要特性它使得实例对象的资源不通过拷贝的方式进行转移除了POD类型。 移动语义具体化其实就是移动构造函数。 struct Resource { ... }class XZZ { public:...构造或者其他的实例化资源...移动构造函数XZZ(XZZ value) {this.m_resource value.m_resource;value.m_resource nullptr;}/// 移动赋值函数XZZ operator (XZZ value) {this.m_resource value.m_resource;value.m_resource nullptr;}... private:Resource *m_resource nullptr; }上面是个简单的例子主要是为了理解移动是怎么来移动资源的。 如果m_resource不是指针也可以通过使用std::move强行将value.m_resource转成右值来触发this.m_resource的移动构造使得两个m_resource的资源进行移动达到同样的效果。 _EXPORT_STD template class _Ty _NODISCARD _MSVC_INTRINSIC constexpr remove_reference_t_Ty move(_Ty _Arg) noexcept {return static_castremove_reference_t_Ty(_Arg); }std::move的效果便是强制将传进来的参数转成右值一般可以将已经右值引用的变量或者将要释放的类型转成右值(将亡值)实现移动语义的功能。 再次提醒如果资源是POD类型的那用移动语义其实没有意义因为移动就是拷贝拷贝就是移动。 另外移动构造什么情况下可以编辑器会提供默认移动构造什么情况下会弃置默认移动构造只能自己写的这些内容不在本节重点感兴趣可自行查看。 . 引用折叠 说回右值引用的类型左值引用的右值引用或者右值引用的左值引用那到底是左值引用还是右值引用呢 C11中引入引用折叠规则reference collapsing通过模板或 typedef 中的类型操作可以构成引用的引用此时适用引用折叠规则右值引用的右值引用折叠成右值引用所有其他组合均折叠成左值引用 废话不多说 简单通俗来说只有右值引用本身和叠加两次的右值引用类型才是右值引用类型否则含至少一个引用的都是左值引用。 不能直接声明一个超过两个的类型 int a 10; int b a; // error: b declared as a reference to a reference但是如果通过using或者typedef间接声明就可以了 typedef int intR; using intRe int;int a 10; intR b a; // 等同于 int b a intRe c a; // 等同于 int c a有了引用折叠就可以好好使用类型擦除完美转发参数类型给别的函数或者类。 . 完美转发 所谓完美转发(prefect forwarding)是指在函数模板中完全依照模板的参数的类型将参数传递给函数模板中调用的另外一个函数。 ——《C 11新特性解析与应用》 完美转发关键点在于 函数模板函数模板参数类型是 类型要接收函数模板参数的函数/类实参用std::forward包装一下 template typename _Ty, typename... _Type _Ty *createClass(_Type... args) {return new _Ty(std::forward(args)...); }这是个没什么实质意义的模板函数仅是为了举例。 为什么要用std::forward 是因为右值引用args本身是左值传进来本身如果是个右值的话结果给到接收函数是个左值那就不是“完美”转发了。 _EXPORT_STD template class _Ty _NODISCARD _MSVC_INTRINSIC constexpr _Ty forward(remove_reference_t_Ty _Arg) noexcept {return static_cast_Ty(_Arg); }_EXPORT_STD template class _Ty _NODISCARD _MSVC_INTRINSIC constexpr _Ty forward(remove_reference_t_Ty _Arg) noexcept {static_assert(!is_lvalue_reference_v_Ty, bad forward call);return static_cast_Ty(_Arg); }所以需要转成右值的类型而如果是左值的话因为函数重载和引用折叠的缘故即使通过std::forward也是转成左值类型。 参考资料 《C 11新特性解析与应用》 《C/C 参考文档》
http://www.hkea.cn/news/14354023/

相关文章:

  • 邯郸住房及城乡建设部网站wordpress 注册页修改
  • 衡阳微信网站开发深入了解网站建设
  • 网站建设公司 云智互联房地产市场发展趋势
  • 深圳网站建设深圳做网站可以用新建项目的方式吗
  • 西部数码网站管理助手 2008音乐网站是否可以做浅度链接
  • 抖音号出售网站网站备案被注销吗
  • 华强北设计网站建设深圳定制网站制作招聘网
  • 做直播网站用什么程序wordpress timeline 修改
  • 各大网站响应生态建设手机制作个人简历表格
  • 惠山做网站公司网站源码整站打包
  • 电商网站开发数据库设计wordpress完美商城
  • 青岛网站设计c2c代表性企业网站
  • 做网站到哪里接单怎么去推广一个产品
  • 沈阳网站建设发布html空白模板下载
  • 智库建设网站北京做网站开发公司
  • 公司做网站需要注意些什么问题吉林长春有做网站的吗
  • 小企业网站建设公司专业关键词优化平台
  • 老年公寓网站模板医疗器械网站备案前置审批事例
  • 网站建设咨询服务毕业设计代做网站推荐
  • 掌握cms建设网站实训报告医院网站开发多少钱
  • 郴州免费招聘网站福州制作网站设计哪里比较好
  • 专业3合1网站建设电话小欢喜林磊儿什么网站做家教
  • 重庆专业的网站建设公司哪家好排名第一的手机清理软件
  • 建设一个网站多少钱网站顶部可关闭广告
  • 网站开发一年费用总计通辽大柒网站建设有限公司
  • 电商平台网站开发东莞网站关键词排名
  • 付费阅读网站代码南昌网站建设行情
  • 深圳市建设工程合同备案网站电子商务网站分类
  • 美食网站建设的时间进度表物联网方案
  • 做的好的旅游网站江苏省网站建设哪家好