直接上代码
#include<iostream>
#include <string>
using namespace std;
const int &_int(const int &s)
{
int ret=s;
return ret;
}
const string &_string(const string &str)
{
string s=str;
return s;
}
int main(void)
{
cout<<_int(6)<<endl; //这个可以正常输出
cout<<_string("string 引用")<<endl; //但是这个不可以
getchar();
return 0;
}
const string &_string(const string &str)
{
string s=str;
return s;
}
直接return s;堆栈中的临时对象的引用(或指针)做法是危险地,其结果是不可预期的。
可能的解释是:你前一秒运气好;),且sizeof(int)大小相对于sizeof(string)小多了,所以int ret被踩到的概率小。
记住其行为是不可预期的好了,没有必要深究为什么_int(6)“可以”,_string("string 引用")不可以?