返回引用事实上是返回变量的地址。
所谓的不可以返回局部变量的引用或指针,指的是不能返回局部变量的引用或地址给引用或指针。事实上还是看该地址的位置是否在该函数的栈区,若是在栈区,函数调用结束,该地址就被释放了。尽管会出现栈地址上的值没被销毁的问题,可能是该栈区还没被其他的函数堆栈掉。
1、int & fun()
{
int a = 10;
return a;
}
不可以,尝试返回 a 的地址给引用变量,a是存在栈里的,函数结束调用栈被销毁。
std::string & getstr()
{
//1 不可以,虽然buffer是在字符常量区,但是这个函数返回的是string类型,string对象还在栈上
char *buffer = "abcdef";
return std::string(buffer);
//2
//string str = "1213";
//return str;
}
2、int * fun()