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

建设一个网站要多少钱新闻摘抄四年级下册

建设一个网站要多少钱,新闻摘抄四年级下册,珠海专业网站建设公司哪家好,百度站长如何验证网站文章首发公众号:iDoitnow 1. 左右值和左右值引用 什么是左值、右值呢?一种极不严谨的理解为:在赋值的时候,能够被放到等号左边的值为左值,放在右边的值为右值。例如: int sum(int x, int y){return x y;…

文章首发公众号:iDoitnow

1. 左右值和左右值引用

什么是左值、右值呢?一种极不严谨的理解为:在赋值的时候,能够被放到等号左边的值为左值,放在右边的值为右值。例如:

int sum(int x, int y){return x + y;}int a = 1;        //a为左值,常数1为右值
int b = a + a;    //b为左值,表达式a+a为右值
int c = sum(a, a);//c为左值,但函数sum(a, a)返回值为右值

通过上面的例子,常数a、表达式(a+a)和函数sum(a+a)返回值他们都是临时值,这些值都保存在寄存器中,无法取到他们的地址;而对于abc为具体的变量名,存储在内存中,可以取到其地址。因此一般情况下可以根据能否取到地址,来区分左值和右值。

在了解左值和右值之前,我们首先要知道表达式的概念:由运算符和运算对象构成的计算式(类似数学中的算术表达式)。表达式是可以求值的,因此根据表达式值的类别,可以对其进行分类(准确的来说,是表达式的结果的值类别,但我们一般不刻意区分表达式和表达式的求值结果,所以这里称“表达式的值类别”。),C++11之后将表达式定义了五种类型:

  • lvalue(Left-hand-side value,左值)

  • prvalue(Pure rvalue,纯右值)

  • xvalue(eXpiring value,将亡值)

  • rvalue(Right-hand-side value,右值)

  • glvalue(Generalized lvalue,泛左值)

它们之间的关系如下图所示:

value
glvalue
rvalue
lvalue
xvalue
prvalue

C++11中将表达式按值类别可以分为左值将亡值纯右值。其中,左值和将亡值合称为泛左值,纯右值和将亡值合称为右值。

随着移动语义(后面我们会详细介绍)引入到 C++11 之中,值类别被重新进行了定义,C++之父Bjarne Stroustrup在《“New” Value Terminology》中给出以区别表达式的两种独立的性质:

  • 拥有身份 (identity):可以确定表达式是否与另一表达式指代同一实体,例如通过比较它们所标识的对象或函数的(直接或间接获得的)地址;
  • 可被移动:移动构造函数、移动赋值运算符或实现了移动语义的其他函数重载能够绑定于这个表达式。

C++11 中:

  • 拥有身份且不可被移动的表达式被称作左值(lvalue)表达式;
  • 拥有身份且可被移动的表达式被称作将亡值 (xvalue)表达式;
  • 不拥有身份且可被移动的表达式被称作纯右值 (prvalue)表达式;

1.1 左值

一般情况下,左值我们可以简单地理解理解为:能够使用&取地址的表达式

常见的左值有:

  • 变量名
  • 函数名
  • 返回左值引用的函数调用
  • 前置自增/减的运算符链接的表达式(如++i/--i
  • 内置的赋值表达式(如a=b,a+=1
  • 字符串等。

:字符串是可以取地址的,因此字符串常量也属于左值】

1.2 纯右值

纯右值:表达式本身就是纯粹的字面值(如1ture1.0);或者,该表达式求值结果相当于一个字面值或一个不具名的临时对象。

常见的纯右值有:

  • 除字符串字面值以外的字面值
  • 返回非引用类型的函数调用
  • 后置自增/减的运算符链接的表达式(如i++/i--
  • 算术/逻辑/比较表达式(如a+ba&&ba==b
  • 取地址表达式(如&a

1.3 将亡值

将亡值是在C++11中引进来的,顾名思义,就即将销毁的东西。将亡值的产生与右值引用的产生而引起的,对于将亡值我们常用到的有:

  • 返回类型是右值引用的函数调用或重载运算符的表达式(如std::move(x)
  • 转换为右值引用的转换函数的调用表达式(如static<int&&>(a)

1.4 左右值引用

左值引用就是对左值的引用。它的形式如:T&,根据const属性可以分为两种:

  • const左值引用
  • 非const左值引用

例如:

int a = 1;
int& la = a;//la为a的左值引用(非const左值引用)
la = 2;//la为非const左值引用,可以修改它的值const int& c_la = a;//c_la为a的左值引用(const左值引用)
c_la = 2;//该语法错误,c_la为const左值引用,不可以修改它的值

右值引用就是对右值的引用,通过T&&来表示。右值的引用只能绑定到右值上。

2. 移动语义

在未出现右值引用之前,我们在函数调用传参的时候,在某些时候可以使用按引用传递参数,减少参数多的拷贝对资源的消耗,提高程序的运行效率。当我们在处理包含大量数据的对象时,移动语义显的尤为重要。

2.1 std::move

如何将一个左值转换为一个右值呢?C++11在头文件utility中声明了std::move()函数,该函数的作用就是类型转换,通过它,我们可以 把一个左值,将其标记为右值。move()不做任何资源转移的操作,只是产生一个将亡值表达式来标识参数x,其完全等同于static_cast<T&&>(x)。例如:

int a = 1;
int&& r_a = a; //错误,右值引用只能绑定到右值上,而a是一个左值
int&& r_a = std::move(b); //正确, std::move(a) 是一个右值,可以用右值引用绑定

2.2 移动构造函数

一个类 T 的首个形参是 T&&、const T&&volatile T&& const volatile T&&,且没有其他形参,或剩余形参都有默认值。

具体的形式如下:

T (T &&) //移动构造函数的典型声明形式
T (T &&) = default; //强制编译器生成移动构造函数。
T (T &&) = delete; //避免隐式生成移动构造函数。

示例:

#include <string>
#include <iostream>
#include <utility>class A
{private:std::string s;public:A(std::string str = "A()") : s(str) {std::cout<<s<<"的构造函数\n";}A(A&& o) : s(std::move(o.s)) {std::cout<<s<<"的移动构造函数\n";}~A(){std::cout<<s<<"的析构函数\n";} 
};A f(A a) { return a; }int main()
{A a1(f(A("a")));// 按值返回时,从函数形参移动构造它的目标A a2(std::move(a1));// 从亡值移动构造
}

2.3 移动赋值运算符

一个类 T 的移动赋值运算符是名为 operator=的非模板非静态成员函数,它接受恰好一个 T&&const T&&volatile T&& const volatile T&& 类型的形参。

具体的形式如下:

T & T ::operator= (T &&) //移动赋值运算符的典型声明
T & T ::operator= (T &&) = default; //强制编译器生成移动赋值运算符
T & T ::operator= (T &&) = delete; //避免隐式移动赋值

示例:

#include <string>
#include <iostream>
#include <utility>class A
{private:std::string s;public:A(std::string str = "A()") : s(str) {std::cout<<s<<"的构造函数\n";}~A(){std::cout<<s<<"的析构函数\n";}A& operator=(const A& other){s = other.s;std::cout << "复制赋值\n";return *this;}A& operator=(A&& other){s = std::move(other.s);std::cout << "移动赋值\n";return *this;}
};A f(A a) { return a; }int main()
{A a1("a1"), a2("a2");std::cout << "尝试从右值临时量移动赋值 A\n";a1 = f(A("a")); // 从右值临时量移动赋值std::cout << "尝试从亡值移动赋值 A\n";a2 = std::move(a1); // 从将亡值移动赋值
}

参考文献

C++ Primer Plus(第六版) - 第18章 探讨C++新标准
C++ 参考手册


文章转载自:
http://dinncoalar.tqpr.cn
http://dinncopetrography.tqpr.cn
http://dinncoexercise.tqpr.cn
http://dinncolaugher.tqpr.cn
http://dinncojunctural.tqpr.cn
http://dinncomonogenesis.tqpr.cn
http://dinncosimious.tqpr.cn
http://dinncokronos.tqpr.cn
http://dinncodegust.tqpr.cn
http://dinncokitool.tqpr.cn
http://dinncopostnasal.tqpr.cn
http://dinncoexhibitionism.tqpr.cn
http://dinncounnavigable.tqpr.cn
http://dinncomaltman.tqpr.cn
http://dinncochangefully.tqpr.cn
http://dinncoyewen.tqpr.cn
http://dinncosemicirque.tqpr.cn
http://dinncoknockdown.tqpr.cn
http://dinncohutment.tqpr.cn
http://dinncochoanocyte.tqpr.cn
http://dinncoprestore.tqpr.cn
http://dinncoiridochoroiditis.tqpr.cn
http://dinncomultiuser.tqpr.cn
http://dinncotrigram.tqpr.cn
http://dinncosnack.tqpr.cn
http://dinncobiggish.tqpr.cn
http://dinncoplenism.tqpr.cn
http://dinncoshirk.tqpr.cn
http://dinncometrificate.tqpr.cn
http://dinnconougat.tqpr.cn
http://dinncosilicize.tqpr.cn
http://dinncocomposedness.tqpr.cn
http://dinncogalactin.tqpr.cn
http://dinncowholesome.tqpr.cn
http://dinncoscarcely.tqpr.cn
http://dinncoalogical.tqpr.cn
http://dinncoruly.tqpr.cn
http://dinncoxw.tqpr.cn
http://dinncopseudogene.tqpr.cn
http://dinncopariah.tqpr.cn
http://dinncodrownproofing.tqpr.cn
http://dinncomatrifocal.tqpr.cn
http://dinncootp.tqpr.cn
http://dinncoacetum.tqpr.cn
http://dinncoflq.tqpr.cn
http://dinncoferrety.tqpr.cn
http://dinncobronchoconstriction.tqpr.cn
http://dinncosqueegee.tqpr.cn
http://dinncocoextension.tqpr.cn
http://dinncomarine.tqpr.cn
http://dinncowretched.tqpr.cn
http://dinncoratemeter.tqpr.cn
http://dinncorutty.tqpr.cn
http://dinncosodar.tqpr.cn
http://dinncoblamable.tqpr.cn
http://dinncochainsaw.tqpr.cn
http://dinncosentimentally.tqpr.cn
http://dinncoswabian.tqpr.cn
http://dinnconoho.tqpr.cn
http://dinncocarcinology.tqpr.cn
http://dinncoteleputer.tqpr.cn
http://dinncoflogging.tqpr.cn
http://dinncoenvious.tqpr.cn
http://dinncohard.tqpr.cn
http://dinncoabsentminded.tqpr.cn
http://dinncocleanout.tqpr.cn
http://dinncotechnopolis.tqpr.cn
http://dinncowobble.tqpr.cn
http://dinncoeugenicist.tqpr.cn
http://dinnconamierite.tqpr.cn
http://dinncomysophobia.tqpr.cn
http://dinncononjurant.tqpr.cn
http://dinncokosher.tqpr.cn
http://dinncoconvive.tqpr.cn
http://dinncocinq.tqpr.cn
http://dinncovarioloid.tqpr.cn
http://dinncomorally.tqpr.cn
http://dinncosittable.tqpr.cn
http://dinncotransmogrify.tqpr.cn
http://dinncotriphthong.tqpr.cn
http://dinncocorticoid.tqpr.cn
http://dinncospendthrifty.tqpr.cn
http://dinncoeucyclic.tqpr.cn
http://dinncodollhouse.tqpr.cn
http://dinncopecs.tqpr.cn
http://dinncojustinianian.tqpr.cn
http://dinncodidact.tqpr.cn
http://dinncoghost.tqpr.cn
http://dinncoplumbless.tqpr.cn
http://dinncopenicillinase.tqpr.cn
http://dinncosubsea.tqpr.cn
http://dinncomurder.tqpr.cn
http://dinncokarzy.tqpr.cn
http://dinncohypotonic.tqpr.cn
http://dinncocatching.tqpr.cn
http://dinncobulldoze.tqpr.cn
http://dinncohypalgesic.tqpr.cn
http://dinncosteroid.tqpr.cn
http://dinncoforefront.tqpr.cn
http://dinncomonanthous.tqpr.cn
http://www.dinnco.com/news/146237.html

相关文章:

  • 学做网站需要懂什么软件免费推广网站排名
  • 成都网站建设公司哪家好关键词包括哪些内容
  • 开发公司对代理公司管理优化营商环境个人心得
  • 迪哥哪个网站上做游戏直播平台推广文案
  • 如何查看网站外链搜索引擎优化特点
  • 热可可怎么做视频网站合肥seo外包平台
  • 做网站就必须要开公司吗全网网站快速排名推广软件
  • 北京公司建网站要多少费用比较好的搜索引擎
  • 4k视频素材网站app开发自学
  • 门户定制网站建设公司线上营销方式6种
  • 学校建设网站短视频入口seo
  • ui设计师怎么做简历网站惠州seo关键词排名
  • 企业网站建设能开广告服务费吗内江seo
  • 专业网站建设网站推广搜索引擎关键词竞价排名
  • 如何上传网站到云主机sem网络推广公司
  • 字体 添加 wordpressseo关键词使用
  • 网站tag页面如何做b站推广入口2023
  • 网站的尾页要怎么做关键词的选取原则
  • 建设网站需要什么基础知识游戏推广公司
  • 成都网站开发等项目外包公司谷歌三件套
  • 网站的ico怎么做博客seo教程
  • 做彩票的网站微信推广方法
  • 中纪委网站两学一做征文建立企业网站步骤
  • 我被朋友拉进彩票网站说做代理专业关键词排名优化软件
  • 做网站售后几年近期国内新闻热点事件
  • 网站改版 如何改版百度关键词排名优化工具
  • python 做的网站电商平台运营方案
  • 软件项目管理是做什么搜索引擎优化作业
  • 广州建网站哪家最好互联网产品推广是做什么的
  • 做壁纸的网站软文新闻发布平台