为什么运行时错误发生在这个与返回const引用相关的代码示例中?

时间:2013-04-28 03:33:52

标签: c++ string reference

std::string const& foo()
{
    return "Hello World";
}

/*
int main()
{
    std::string str = foo(); // runtime error
}
*/


int main()
{
    foo(); // ok
}

为什么'运行时错误'出现在这个代码示例中,但在其他可以解决返回const引用? 第一个主要是错误,但第二个是好的。

2 个答案:

答案 0 :(得分:0)

您的函数foo具有未定义的行为。它返回对本地创建的对象的引用,该对象在函数返回时被销毁。你的第二个主要是没关系。它碰巧在你的情况下没有出现任何明显的可见错误,但它仍然是错误的。

答案 1 :(得分:0)

#include  <windows.h>
#include  <string>

using namespace std;

std::string const  foo() {

 std::string  str = "Hello World";
 return str;

}

int main() {

 foo();                                                    // ok
 std::string str = foo();                                  // ok

}