C++--右值引用

发布时间:2024年01月20日


一.左右值

在C++中,有左值和右值的概念。

左值(lvalue)表示一个可以获取其地址的表达式,或者说是一个具名的对象或函数。它可以在等号左边出现,也可以在等号右边出现。例如:

int x = 10; // x 是一个左值
int* p = &x; // &x 获取了 x 的地址,所以 &x 也是一个左值

右值(rvalue)表示一个表达式,它的值是一个临时的、无法获取地址的值。右值只能在等号右边出现。例如:

int a = 5 + 3; // 5 + 3 是一个右值
int b = x + 2; // x + 2 是一个右值

二.右值引用

右值引用(rvalue reference)是C++11引入的一种新的引用类型,用于绑定到右值。右值引用使用两个&符号(&&)表示。

右值引用可以像常规引用一样绑定到右值,但与常规引用不同的是,右值引用可以修改或窃取右值的内容。这为实现移动语义、完美转发和资源管理等提供了更多的灵活性和效率。

右值引?只能引?临时变量和常量值.

int main()
{
	double a = 15.2;
	//double& a1 = a * 2 + 10.2;//错误,不能引用临时变量
	double&& ra = a * 2 + 10.2;//合法
	//double &b1 = sqrt(100);//错误,不能引用临时变量
	double&& rb = sqrt(100);//合法
	cout << ra << "," << rb << endl;	
	return 0;
}

右值引用是C++语言中重要的特性之一,为性能优化和更高级的资源管理提供了支持。它在移动语义、完美转发和工厂模式等技术中广泛应用。


三.const引用和右值引用的区别

int main()
{
	int a = 10;
	const int ca = 20;
	const int& b = a; //const引用,引用普通左值
	const int& c = ca;//const引用,引用const左值
	const int& d = 30; //const引用,引用右值
	cout << b <<","<<c<<","<<d<< endl;//都能读
	//b = 100;//error,不能修改const引用的值
	//c = 200;//error,不能修改const引用的值
	//d = 300;//error,不能修改const引用的值

	//右值引用
	//int&& e = a;//error,右值引用,不能引用左值
	//int&& f = ca;//error,右值引用,不能引用const左值
	int&& g = 30;//右值引用,引用右值
	g = 300;//右值引用,值可以修改
	cout << g << endl;//300

	return 0;
}

文章来源:https://blog.csdn.net/m0_75266675/article/details/135716147
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。