C++引用与变量名的区别
string Fun1()
{
string num="ly";
return num;
}
//在程序中使用此方法不会报错,因为方法执行完毕以后虽然num被释放,但是num的值会被保存到一个临时存储单元,然后从临时存储单元复制到调用此方法给其赋值的变量中去(如:在main方法中:string mynum=Fun1(),num的值就会被保存到mynum)
2.
string& Fun2()
{string num="ly";
return num;
}
//在程序中使用此方法会报错,因为返回的是对num的引用,而Fun2()方法执行完毕以后num被释放了,所以返回的引用试图引用已经被释放的内存会报错
后来研究发现,将以上两个例子中的string类型换做int类型,都不会报错。既:
#include <iostream>
#include <string>
using namespace std;
int& Fun1()
{
int num=123;
return num;
}
int main()
{
int mynum=Fun1();//运行到这一句居然不报错,为什么?难道Fun1中的局部变量num没有被释放?
cout<<mynum<<endl;
return 0;
}
如果将int类型换为int指针类型,又会报错:
#include <iostream>
#include <string>
using namespace std;
int*& Fun1()
{
int num=456;
int *p=#
return p;
}
int main()
{
int* p=Fun1();//运行到这一句居然不报错,为什么?难道Fun1中的局部变量num没有被释放?
cout << "result:\n";//在对指针p取值之前,必须任意调用一个方法,以产生参数压栈或局部变量申请内存操作,好覆盖Fun1方法中的具备变量num
cout<<*p<<endl; //输出一个错误的值
return 0;
}