栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C++ 左值与右值

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C++ 左值与右值

lvalue rvalue
很多人说:左值就是有地址的值
但是,不要试图用l和r来找定义。
要从实现上理解。

检测左值的方法:左值引用

string& a = "aa"; // 错误,因为"aa"是右值,不能被左值引用
string& a = string("aa"); // 错误,因为string("aa")是右值,不能被左值引用
string b = "aa";
string& a = b; //正确,因为b是左值

检测右值的方法:右值引用

std::string&& a = "aa"; //正确,这里有一个隐式转换,把"aa"转成了string("aa"),string("aa")是右值
std::string&& a = std::string("aa"); //正确,因为string("aa")是右值
std::string b = "aa";
std::string&& a = b; //错误,因为b是左值,不能被右值引用

兼容左值和右值参数的方法:常量左值引用

它实际上在做的事情是在编译器创建新的代码,如果是右值传递,把右值赋值给一个新的左值,再用左值传递给左值引用;如果是左值传递,就直接传递过来。

const string& a = "aa";
const string& a = string("aa");

初学者会遇到右值的一种情况。

string a1,a2;
a1 + a2 是右值,因为它是临时变量

所以记住,左值是由某种存储支持的变量,右值是临时值。
左值引用只能接受左值,除非用const;右值引用只能接受右值。

右值引用带给我们什么

我们现在有了一种方法来检测临时值,并对它们做一些特殊的事情。

因为它们是临时变量,我们可以从中窃取一些资源。
而const 的左值引用,你不能从里面窃取任何东西,因为它可能在很多函数中被使用。

用途比如移动语义。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/943118.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号