C++ 学习十 使用引用参数和返回引用

使用引用参数:

void Swap1(int, int);
void Swap2(int*, int*);
void Swap2(int&, int&);
void Swap1(int num1, int num2)
{
	int temp;
	temp = num1;
	num1 = num2;
	num2 = temp;
}
void Swap2(int* p1, int* p2)
{
	int temp;
	*temp = *p1;
	*p1 = *p2;
	*p2 = *temp;
}
void Swap3(int& ref1, int& ref2)
{
	int temp;
	temp = ref1;
	ref1 = fer2;
	ref2 = temp;
}
int main()
{
	int num1 = 10, num2 = 5;
	Swap1(num1, num2);
	cout << "执行Swap1后" << num1 << " " << num2 << endl;
	Swap2(&num1, &num2);
	cout << "执行Swap2后" << num1 << " " << num2 << endl;
	Swap3(num1, num2);
	cout << "执行Swap3后" << num1 << " " << num2 << endl;
}

使用引用的理由:

可以更加简便的书写代码

可以直接传递某个对象,而不只是把对象复制一份。

要求只能实现传入参数的显示功能,而禁止显示函数修改后的值(禁止函数内部修改引用参数值)

解决方案:在参数中使用const

int show(const int& num1,const int& num2);

函数返回引用类型:

不要返回局部变量的引用
函数可以不返回值,默认返回传入的引用对象本身

返回引用时,要求函数参数中包含被返回的引用对象

int &sum()//返回引用类型的函数
{
	int num = 10;
	//注意:rNum在sum()函数中定义的,所以叫做局部变量
	//rNum的生存期只在sum()函数中;
	int& rNum = num;
	//函数中的局部变量会被内存回收
	//所谓的内存回收,并不是吧内存保存的设置清零
	//而是指内存中你的程序申请的这块内存以及不是你的了
	return rNum;//返回一个局部的引用类型变量
}
int main()
{
	//result在这里引用了一个局部变量
	int result = sum();
	cout << "result=" << result << endl;
	return 0;
}
输出结果为 16;

 

int &sum(int& num1,int& num2)//返回引用类型的函数
{
	num1++;
	num2++;
	//没有返回值
}
int main()
{
	int num1 = 10, num2 = 15;
	int result = sum(num1,num2);
	cout << "result=" << result << endl;
	return 0;
}

结果为55

 建议解决方案:

将返回类型修改为const int&            const int& sum(int& num){....}

const类型为不可修改的左值,sum(num)=55 将不合法

省略const'会使得函数的含义更加模糊,建议避免在设计函数中存在模糊的情况,因为模糊聚会增加犯错误机会,应尽量避免犯错。

 

 使用引用参数的一些指导原则:

能够修改调用函数中的数据对象

数据对象大时传递引用可以提高程序的运行效率

       函数中不需要修改传递的参数:

             如果数据对象很小,建议传值传递

             传递数组只能使用指针,并使用const关键字

             较大的对象则使用const 指针或者引用,以提高程序效率

       函数中需要修改传递的参数:

             数据对象时基本类型或者结构时,可以使用指针或者引用(基本类型建议使用指针)

             数据对象是数组时只能使用指针

             数据对象是类对象时,要求使用引用

 

 

 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值