在C ++中将字符串文字返回给const String引用

时间:2015-02-01 04:24:50

标签: c++ string

编译以下代码时,编译器会发出警告warning: returning reference to temporary

const string& example1()
{
    return "Hello";
}

此代码甚至无法编译:

void example2(){
    const string& str = "Hello";
}

并且这个是有效的,因为我们知道编译器将文字字符串初始化为只读内存段。

char* example3()
{
    return "Hello";
}

在编译方法example1()时,能帮助我了解幕后发生的事情吗?

非常感谢你的帮助!

2 个答案:

答案 0 :(得分:2)

Return "Hello"会创建一个临时std::string,它将在您的函数结束时删除。在这里,您将返回std::string的引用,该引用在函数调用结束时不存在。

要解决此问题,您可以将example1()的返回类型更改为string

答案 1 :(得分:0)

添加到Jerome的答案中,如果您只想拥有该字符串的单个副本,也可以这样做:

const string& example1()
{
    static string example = "Hello";
    return example;
}

(现在example是一个静态函数变量,也将存在于函数外部。)