如何查询昆山建设局网站上的预售信息?
摘要:强化网站建设,昆山建设局网站查预售,贵州遵义新闻,温州cms建站系统文章目录左值引用左值引用的概念左值引用的使用右值引用右值引用的概念右值引用的使用左右值相互引用左值引用对右值进行引用右值引用对左值进行引用右值引用使用场景和意义左值引用的优
强化网站建设,昆山建设局网站查预售,贵州遵义新闻,温州cms建站系统文章目录左值引用左值引用的概念左值引用的使用右值引用右值引用的概念右值引用的使用左右值相互引用左值引用对右值进行引用右值引用对左值进行引用右值引用使用场景和意义左值引用的优势左值引用的短板右值引用的优势完美转发模板万能引用完美转发实际运用场景左值引用
左值…
文章目录左值引用左值引用的概念左值引用的使用右值引用右值引用的概念右值引用的使用左右值相互引用左值引用对右值进行引用右值引用对左值进行引用右值引用使用场景和意义左值引用的优势左值引用的短板右值引用的优势完美转发模板万能引用完美转发实际运用场景左值引用
左值引用的概念
左值是一个表示数据的表达式(如变量名或解引用的指针)我们可以获取它的地址可以对它赋值左值可以出现赋值符号的左边右值不能出现在赋值符号左边。定义时const修饰符后的左值不能给他赋值但是可以取它的地址。左值引用就是给左值的引用给左值取别名。
左值引用的使用 右值引用
右值引用的概念
右值也是一个表示数据的表达式如字面常量、表达式返回值函数返回值(这个不能是左值引用返回)等等右值可以出现在赋值符号的右边但是不能出现出现在赋值符号的左边右值不能取地址。右值引用就是对右值的引用给右值取别名。
右值引用的使用 这时不知道大家有没有一个疑惑右值引用后的别名可以修改右值吗答案是可以的。
需要注意的是右值是不能取地址的但是给右值取别名后会导致右值被存储到特定位置且可以取到该位置的地址也就是说例如不能取字面量10的地址但是rr1引用后可以对rr1取地址也可以修改rr1。如果不想rr1被修改可以用const int rr1 去引用是不是感觉很神奇这个了解一下实际中右值引用的使用场景并不在于此这个特性也不重要。
左右值相互引用
左值引用对右值进行引用
我们知道左值引用可以引用左值那么左值引用可以引用右值吗答案是可以的不过要加const。
右值引用对左值进行引用
我们知道右值引用可以引用右值那么右值引用可以引用左值吗答案是可以的不过要加move。move以后的值具有右值属性。 那么右值引用对左值进行引用后可以修改吗 答案是可以的。 右值引用使用场景和意义
前面我们可以看到左值引用既可以引用左值和又可以引用右值那为什么C11还要提出右值引用呢是不是化蛇添足呢下面我们来看看左值引用的短板右值引用是如何补齐这个短板的 左值引用的优势
场景一 场景二
左值引用的短板
我们知道左值引用都是对存在且还没销毁的值进行引用但是如果一个值不存在或者销毁了我们还能用左值引用吗答案是不能。 场景一 我们先把右值引用的移动构造屏蔽掉把左值引用的拷贝构造放开。 那么如果我们把右值引用的移动构造放开呢 场景二 右值引用的拷贝构造放开
我们说了这么多把左值引用的场景换成右值引用的场景那么右值引用到底有什么用呢
右值引用的优势
右值分为纯右值和将亡值。 我们知道左值引用对左值资源的拷贝是没错的。但是左值引用对右值的将亡值拷贝就有问题了因为将亡值在使用一次后就会销毁掉。这时候就运用到了移动构造。 移动构造本质是将参数右值的资源窃取过来占为已有那么就不用做深拷贝了所以它叫做移动构造就是窃取别人的资源来构造自己。 从这里我们可以看出右值引用时是对资源的转移不是拷贝所以右值引用的效率高。
完美转发
std::forwardT(t)完美转发在传参的过程中保持了t的原生类型属性。
模板万能引用 从运行结果可以的得知模板的确实是万能既能引用左值也能引用右值。 但是引用后就退化了全部都变成了左值。那么该怎么解决呢如何在传参的过程中保持自己的属性呢这时候就运用到了完美转发。
完美转发实际运用场景
没有完美转发时 有完美转发时
