【C++基础07】引用函数返回值(引用当左值)

本文深入探讨了C++中引用使用的难点,特别是函数返回值为引用的情况。详细分析了栈变量和静态变量作为返回值的不同行为,并通过实例展示了如何正确使用引用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

C++引用使用时的难点:

当函数返回值为引用时


若返回栈变量

不能成为其它引用的初始值

不能作为左值使用


若返回静态变量或全局变量

可以成为其他引用的初始值

即可作为右值使用,也可作为左值使用


栈变量做返回值:

int getA1()
{
	int a = 10;
	return a;
}

//若返回栈变量  不能成为其他引用变量的初始值

// 返回a引用 就是返回a的本身  返回a的一个副本 10
int& getA2()
{
	int a = 10;
	return a; //返回引用的本质 是c++编译器帮我们取地址   也就是用一个常量指针指向了一个被释放的内存空间 但是返回值在寄存器中存放
}


int* getA3()
{
	int a = 10;
	return &a;
}


void main()
{
	int a1 = getA1(); //10的值返回出去了 一般情况下把返回值放在寄存器中

	int a2 = getA2();
	//因为引用所依附的内存空间已经被释放
    int &a3 = getA2(); //a3在debug下是个乱码  release下正常   相当于存放a的地址
 
	int *a4 = getA3();

	printf("a1:%d,a2:%d,a3:%d",a1,a2,a3); //*a3

	cout << "hello!" << endl;
	system("pause");
	return;
}




静态变量做返回值:

int& j2()
{
	static int a = 10;
	a++;
	return a;
}
//若返回静态变量 或者 全局变量
// 可以成为其他引用的初始值
// 既可作右值使用 也可作左值使用

void main()
{
	int a1 = 10;
	int a2 = 20;

	a1 = j1();
	a2 = j2();
	int &a3 = j2();

	cout << "hello!" << endl;
	system("pause");
	return;
}



-----函数当左值:

//返回一个int变量的值 也就是11
int g()
{
	static int a = 10;
	a++;
	return a;
}

//返回变量本身
int& g2()
{
	static int a = 10;
	a++;
	return a;
}


int* g3()
{
	static int a = 10;
	a++;
	return &a;
}


void main()
{
	//g() = 100; ==》 11=100;
	g2() = 100; //通过  ==>a=100;  //函数返回值是一个引用 并且当左值

	*g3() = 200; //通过 
	printf("%d ",*g3());//201
	cout << "hello!" << endl;
	system("pause");
	return;
}

//最主要看一个内存空间是不是一个有效的内存空间




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值