c++学习笔记(十)
返回应用类型
返回引用
1.不要返回局部变量的引用
为了验证为什么不能返回局部变量的引用,我按照所学的例题自己做了一点小测试。
#include<iostream>
using namespace std;
int& sum()
{
int num=10;
int& rnum=num;
return rnum;
}
int main()
{
int n;
n=sum();
cout<< n << endl;
return 0;
}
结果是10,并没有问题。
然后我又按照视频所教的,用测试函数测试一下。
结果
还是没变,有点小失望。
这是视频,视频中老师所写的测试函数使result改变了值。
虽然我自己做得测试失败了,但根据视频还是弄懂了意思。
不能返回局部变量的引用是因为局部变量会被内存回收。
所谓内存回收,并不是把内存保存的设置清零,而是指内存中你的程序所申请的这块内存已经不再是你的了,被其他程序占用,所以值会改变。
而你传递出去的是一个地址,地址不管里面的值是否改变,都会将值给出去,所以就有可能出错。
2.函数可以不返回值,默认返回传入的引用对象本身
这是老师所写的代码。
但很遗憾,我用的devc++会报错,与老师讲的不一样。。。
但如果要返回的话必须返回含参的引用,要么返回num1,要么返回num2,返回num1+num2
都是错的。
因为num1+num2
已经是一个常量的,所以会报错。