首页 新闻 会员 周边

为什么可以返回内置类型的局部引用而标准库中的却不行,如int和string

0
悬赏园豆:5 [已解决问题] 解决于 2011-11-28 21:27

直接上代码

#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;
}


 

化蝶fei的主页 化蝶fei | 初学一级 | 园豆:199
提问于:2011-11-27 09:24
< >
分享
最佳答案
0
    const string &_string(const string &str)
{
string s=str;
return s;
}

直接return s;堆栈中的临时对象的引用(或指针)做法是危险地,其结果是不可预期的。

 

可能的解释是:你前一秒运气好;),且sizeof(int)大小相对于sizeof(string)小多了,所以int ret被踩到的概率小。

记住其行为是不可预期的好了,没有必要深究为什么_int(6)“可以”,_string("string 引用")不可以?

收获园豆:5
胡屯 | 小虾三级 |园豆:714 | 2011-11-27 10:22
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册