C++ 11_右值引用和移动语义

本文介绍了C++11引入的右值引用和移动语义,详细阐述了右值和左值的概念,以及右值引用的特性,包括延长右值生命周期和引用折叠。同时,讲解了std::move()和std::forward()在优化性能和完美转发中的作用,帮助开发者理解如何避免深拷贝,提升程序效率。
摘要由CSDN通过智能技术生成

1.右值和左值的概念

在C++11中 引入了右值引用和移动语义,可以避免一些复制的情况,提高了程序的性能

左值:表达式后依然能找到的持久对象,而右值是表达式后就会消失的对象,长见的左值有具名变量,函数或成员函数的名字,一些返回左值的引用表达式类似与++i,而右值又分为将亡右值和纯右值,纯右值可以是一些很长见的数字比如 42,x++等,而将亡右值 是在过程中会产生一个临时变量,但又不用左值去引用他,比如函数返回的非引用变量,C++中左右的值类型,都将是左值,将亡右值,纯右值之一,而区分左值和右值的区别就是看是否能够对值进行取地址,能取地址的就是左值

2. && 右值引用特性

2.1 右值引用是对一个右值进行引用,以此来延长该右值的生命周期,无论是左值还是右值都必须在初始化的时候引用它,因为引用类型并不具有绑定内存的操作,只是类型的别名
2.2 引用折叠

A: 左值和右值都是独立于它们的类型的,右值引用类型可以是左值也可以是右值
B:* 所有的右值引用叠加到右值引用还是右值引用 && &&, 其他的引用都会折叠为左值引用 当T&&为模板参数时输入左值为左值引用,输入右值就是右值应用 具体的折叠如下*
&& && ------> &&
& && --------> &
& &----------->&
&& &---------> &
C 编译器会将已经命名的右值引用视为左值,而未命名的变量设置为右值

3.右值引用优化性能,避免深拷贝

#inlude<iostream>
#include<cstdio>
#include<cstdlib>
#include<string.h>
using namespace std;

class MyString
{
   
public:
	MyString()
	{
   
		m_data = null;
		m_len =0;
	}
	~MyString()
	{
   
		delete m_data;
		m_data = nullptr;
	}
	MyString(const char*p)
	{
   
		m_len = 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值