#include
#include
using namespace std;
const string& Func()
{
return "123";
}
int main()
{
string s = Func();
cout << s << endl;
return 0;
}
const 引用不是会提升临时变量的生命期吗? 为什么返回函数内的临时变量会报错了? 我对const引用的理解哪里错了吗?
#include
#include
using namespace std;
const string& Func(const string& s)
{
return s;
}
int main()
{
string s = Func("123");
cout << s << endl;
return 0;
}
但是这段代码就可以了。 Func函数参数绑定到一个临时变量,然后返回这个临时变量的const引用,就没有问题?
why?
Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
第一段程序main方法:
改为:
const string s = Func();
返回函数内定义的局部变量是未定义行为。
你这里const是不会提升局部变量的生命周期的,局部变量是存放在栈上,函数返回的时候相应的栈会被释放,也就是局部变量也会被销毁。你第一个程序不是局部变量声明周期的问题,const是代表不能修改的意思,但是你的s变量没有用const修饰,所以不能赋值。
个人觉得,上面的回答都有些问题。。。
看题主的代码:
这段代码确实会报错,但是只要把
const string& Func()中的&去掉就可以了。出错的原因并不是"123"在栈中,当函数返回时出栈导致的错误。而是,"123"本身是在静态数据区的,当函数返回时实际返回的是"123"在静态数据区的地址,该地址在函数Func中是局部变量(在栈中),此时,我们使用引用类型返回该局部变量的(但是,会发生出栈操作),我们的引用变量被释放了,就会出错。但是,如果我们不使用&,返回的时候我们实际得到的是地址值的中间变量(函数的非引用返回值都会保存在中间变量中),此时栈操作是不影响我们获取正确的地址值的。