std::string const& foo()
{
return "Hello World";
}
/*
int main()
{
std::string str = foo(); // runtime error
}
*/
int main()
{
foo(); // ok
}
为什么在此代码示例中出现“运行时错误”,但在其他代码示例中可以处理返回 const 引用?第一个主要是错误,但第二个是好的。
#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
}
您的函数foo
具有未定义的行为。它返回对本地创建的对象的引用,该对象在函数返回时被销毁。你的第二个主线不行。在您的情况下,它碰巧没有表现出任何明显的可见错误,但它仍然是错误的。