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

做网站有哪些主题网站运营一个月多少钱

做网站有哪些主题,网站运营一个月多少钱,上传资料网站,乐清市龙翔网络工程公司左值与右值 序言概念左值和右值的划分理解右值引用常量左值引用与右值引用 移动语义引用折叠完美转发 参考资料 序言 虽然平常都算是了解左值#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.tj-hxxt.cn/news/221635.html

相关文章:

  • 网站开发应注意什么做旅行网站多少钱
  • 给百度做网站的公司北京最有名的广告公司有哪些
  • 做测算的网站黄页推广引流
  • 深圳移动网站建设正规的代运营公司
  • php 企业建站cms宿迁建设局网站
  • 买个网站空间手把手教你做网站 怎么注册域名
  • 在工商局网站做年报要交费吗公司的网站怎么做
  • 自己可以做网站空间吗艺考有哪些专业
  • 凡科建设网站的步骤商城域名注册管理机构
  • php网站案例seo诊断
  • 油气集输毕业设计代做网站佛山新网站建设教程
  • 如何给网站做快速排名有什么外贸平台可以个人进入
  • 门户网站整改情况报告海报模板网址
  • 怎样建立网站平台校园二手网站开发的意义
  • 专业做鞋子的网站吗空间做网站
  • 网站建设公司推荐 知乎企业网站 html模板
  • 网站建设的论文范文wordpress 搜索框位置
  • 设计公司网站建设网站视觉设计
  • 电子商务网站建设侧重哪几个方面网站建设公司 合肥
  • 服饰网站建设 e-ideaseo快速排名软件易下拉霸屏
  • 子目录做网站浙江门户网站建设公司
  • 云南旅游网站建设公司注册网站的免费网址
  • 网站建设如何不被忽悠做网站需要一些什么东西
  • 网站建设需要学什么wordpress主题移动
  • 罗湖网站建设哪家好网站制作网页设计
  • 管件网络销售怎么找客户电影采集网站怎么做seo
  • 江苏建设人才是官方网站wordpress图片宽度
  • ui生成器网站阿里云安装两个wordpress
  • 左侧导航网站网站建设公司在哪里找资源
  • 酒水招商网站大全网站代理制作