编译以下代码时,编译器会发出警告warning: returning reference to temporary
const string& example1()
{
return "Hello";
}
此代码甚至无法编译:
void example2(){
const string& str = "Hello";
}
并且这个是有效的,因为我们知道编译器将文字字符串初始化为只读内存段。
char* example3()
{
return "Hello";
}
在编译方法example1()
时,能帮助我了解幕后发生的事情吗?
非常感谢你的帮助!
答案 0 :(得分:2)
Return "Hello"
会创建一个临时std::string
,它将在您的函数结束时删除。在这里,您将返回std::string
的引用,该引用在函数调用结束时不存在。
要解决此问题,您可以将example1()
的返回类型更改为string
答案 1 :(得分:0)
添加到Jerome的答案中,如果您只想拥有该字符串的单个副本,也可以这样做:
const string& example1()
{
static string example = "Hello";
return example;
}
(现在example
是一个静态函数变量,也将存在于函数外部。)