返回局部对象的引用,小弟遇到问题了!求助
#include<iostream>#include<string>
#include<cstdlib>
using namespace std;
const string &ret(string &str1,string &str2)
{
cout<<"***************************"<<endl;
cout<<"str1="<<&str1<<endl;
cout<<"str2="<<&str2<<endl;
cout<<"str1="<<str1<<endl;
cout<<"str2="<<str2<<endl;
if(str1.size()<str2.size())
{
str1=str2;
return str1;
}
else
{
str2=str1;
return str2;
}
}
//测试返回函数内声明对象的引用
int &ret(const int &i,const int &j)
{
if(i>j)
{
int k=i;
cout<<"&k="<<&k<<"\t"<<k<<endl;
return k;
}
else
{
int k=j;
cout<<"&k="<<&k<<"\t"<<k<<endl;
return k;
}
}
string &ret(const string &s)
{
string str = s;
return str;
}
int main()
{
string str1="abcdefg";
string str2="abcefghigklmn";
cout<<"str1="<<&str1<<endl;
cout<<"str2="<<&str2<<endl;
cout<<"str1="<<str1<<endl;
cout<<"str2="<<str2<<endl;
string str3 = ret(str1,str2);
cout<<"*************************"<<endl;
cout<<"str1="<<&str1<<endl;
cout<<"str2="<<&str2<<endl;
cout<<"str1="<<str1<<endl;
cout<<"str2="<<str2<<endl;
cout<<"*************************"<<endl;
cout<<"str3="<<&str3<<endl;
cout<<"str3="<<str3<<endl;
int i=10,j=15;
int h = ret(i,j);//调用函数,因为返回的是函数中的局部对象的引用,函数执行完时会释放,按说运行时会导致错误。但是此行并没有运行错误?是什么原因啊?
string aa = "dada";
string gg = ret(aa);//调用函数,因为返回的是函数中的局部对象的引用,函数执行完时会释放,运行时导致错误。此行就在运行时正常出现错误了,请高手解释下。
return 0;
}
请各位高手讲讲我注释的第一行,为什么此引用没导致运行时出错。
[[it] 本帖最后由 独孤剑魔 于 2008-9-16 17:04 编辑 [/it]]