首页 > 编程语言 >C++ 右值引用和左值引用

C++ 右值引用和左值引用

时间:2024-10-09 10:48:43浏览次数:8  
标签:右值 int 左值 C++ 引用 && ia

C++ 右值引用和左值引用

C++中所有的值必属于左值和右值。引入右值引用主要是为了提高程序性能,避免不必要的内存拷贝,将资源无代价地转移给另一个所有。使用右值引用可以将右值的生命周期延长至右值引用的生命周期。

左值: 传统C++引用都是左值引用,可以被获取地址的变量都是左值

右值: 不能被获取地址的变量都是右值,右值又分为纯右值和将亡值

纯右值: 临时变量和不被关联的字面变量,临时变量如一般的函数返回值

将亡值: 将要被移动的变量(移为他用),如返回值为T&&的函数,std::move()函数操作的变量,强制转为T&&的变量

//以下均为将亡值

int&& getRightValue()
{
	//....
	return 10;
}

int ia = 10;
int &&ira = std::move(ia); // 转移ia的内存所有权

int getInt()
{
	return 1;
}

int main()
{
	int ia = 10;
	const ica = 15;
	
	int& ria = ia; // 正确	左值赋值给左值引用
	const& rcia1 = ia;//正确	左值赋值给常量左值引用
	const& rcia2 = ica;//正确	常量左值赋值给左值引用
	
	int& ia2 = 10; //错误		右值无法赋值给左值引用
	int& ia3 = getInt();//错误	函数返回值为临时变量(纯右值)
	int&& ita = getInt(); //正确	纯右值可以赋值给右值引用
	int&& ita2 = 10;//正确	右值可以赋值给右值引用
	int&& ita3 = std::move(ia); //正确	std::move()操作的值返回为将亡值,可以赋值给右值引用
	
    // const引用可以适配任何类型

}

标签:右值,int,左值,C++,引用,&&,ia
From: https://www.cnblogs.com/runtimeerror/p/18453770

相关文章

  • vs code如何配置C/C++环境,实现完美运行.c/.cpp文件,以及终端乱码问题
    环境配置在VisualStudioCode(VSCode)中安装了C/C++ExtensionPack后,你可以通过以下步骤来运行C++文件:安装编译器配置编译任务:在VSCode中,你可以创建一个编译任务来编译你的C++文件。这通常通过创建一个tasks.json文件来完成。你可以通过以下步骤创建......
  • 简单的c++实现消息发布/订阅机制例子(成员函数被其他类掉调用的例子)
    以下是一个简单的使用C++实现发布/订阅机制的示例代码。这个示例包含一个简单的事件系统,其中有发布者(Publisher)和订阅者(Subscriber)。以下代码需要C++11以上支持#include<iostream>#include<vector>#include<functional>//事件参数结构体,可以根据实际需求修改struc......
  • (分享源码)计算机毕业设计必看必学 上万套实战教程手把手教学JAVA、PHP,node.js,C++、pyth
    摘要信息化社会内需要与之针对性的信息获取途径,但是途径的扩展基本上为人们所努力的方向,由于站在的角度存在偏差,人们经常能够获得不同类型信息,这也是技术最为难以攻克的课题。针对社区防疫管理等问题,对社区防疫管理系统进行研究分析,然后开发设计出基于Django框架的社区防......
  • 实验1 现代C++编程初体验
    任务1:task1.cpp1//现代C++标准库、算法库体验2//本例用到以下内容:3//1.字符串string,动态数组容器类vector、迭代器4//2.算法库:反转元素次序、旋转元素5//3.函数模板、const引用作为形参67#include<iostream>8#include<string>9......
  • C++的四种类型强转
    C++的四种类型强转文章目录C++的四种类型强转前言1.static_cast2.const_cast3.dynamic_cast4.reinterpret_cast总结前言在C++编程中,类型转换是一个常见且重要的操作。然而,随意使用C风格的类型转换可能会导致难以发现的错误和潜在的安全隐患。为了......
  • C++11新特性—引用折叠
    引用折叠引用折叠(ReferenceFolding)是C++11中引入的一项特性,主要用于模板编程和完美转发(perfectforwarding)中。它涉及到了引用类型(左值引用和右值引用)的组合规则,特别是在模板元编程中,如何确定模板实例化后的引用类型。1.基本概念在C++中,有三种基本的引用类型:左值引用(lv......
  • 【C++ 10】多态
    文章目录......
  • 【C++】map详解
    ......
  • 【C++】继承
    C++的继承1.继承的概念及定义1.1继承的概念1.2继承定义1.2.1定义格式2.基类和派生类对象赋值转换3.继承中的作用域4.派生类的默认成员函数5.继承与友元6.继承与静态成员7.复杂的菱形继承及菱形虚拟继承7.1单继承、多继承与菱形继承7.2虚继承7.3虚继承的原理1.......
  • 【C++】多态
    文章目录1.多态的概念1.1概念2.多态的定义及实现2.1多态构成的条件2.2虚函数2.3虚函数的重写2.4C++11override和final2.5重载、覆盖(重写)、隐藏(重定义)的对比3.抽象类3.1概念3.2接口继承和实现继承4.多态的原理4.1虚函数表与多态原理4.2动态绑定与静......