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

C++进阶之右值引用

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

C++进阶之右值引用

为了支持移动操作,C++新标准引入了新的引用类型——右值引用,通过&&而不是&来获得右值引用,常规引用称之为左值引用,右值引用有完全相反的特性,只能绑定到要求转换的表达式,字面常量或是返回右值的表达式。

C++Primer在471页如上说明,但对于我们来说,我们只是想知道两者分别及应用,但无奈书中的知识点太绕嘴,我们现在来详解两者的区别

左值引用 我们在敲代码时是这样的

int i = 666;
int &j = i; //正确 j引用i;

//我们要分清与指针的区别
//指针

int *m = &i;//这样是指针

接下来我们看一些右值引用的类型

int i = 666;
int &&j = i * 666;//右值引用正确

C++Primer中这样说明 函数返回值是左值引用,赋值操作是返回左值,解引用和前置递增、递减都返回左值 算数,关系 位,后置递增、递减都是返回右值,我们来看代码格式

type fun()  //函数返回右值 请用右值引用接受
{
    return a
}
//函数返回操作
int &i = fun();//错误 返回值非引用函数返回是右值


type& fun()
{
    return a;//返回左值
}


//解引用操作
int i = 6;
int *j = &i;
int k = *j; //解引用 返回左值

//前置递增递减
i++;
j--; //返回左值


//字面常量是右值
int &&i = 6;
//算数操作
int &&i = 5 * 6; //返回右值

int i = 1;
int j = 2;
int && k = i * j;//返回右值

++i;
--j;//都返回右值

根据这些例子 我们就能根据前文中所给的右值和左值类型进行判断和应用左值引用和右值引用

还有一点,我们可以将const的左值引用和右值引用绑定到右值上

左值和右值区别

左值持久;右值短暂 

标准库move函数

虽然我们不能将一个右值引用绑定到左值上,但我们可以把一个左值显式的转换成对应的右值类型

int i = 6;

int &&j = i;//错误无法将左值传递给右值引用

int &&k = std::move(i);//正确 显式move调用告诉编译器我么有一个左值,我们希望像一个右值一样处理

本人猪头一只,希望代码能被看懂,如有错误请提出

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

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

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