Как видно из приведенного ниже примера, код просто слегка модифицируется путем вызова goodByeString ().Как и в других ответах, уже упоминавшихся, переменная в getString с именем tmp является локальной.переменная выходит из области видимости, как только функция возвращается.так как он выделен стеком, память все еще остается действительной, когда функция возвращается, но как только стек снова увеличивается, эта часть памяти, где находилась tmp, переписывается с чем-то другим.Тогда ссылка на содержит мусор.
Однако, если вы решите вывести b, так как он не возвращается по ссылке, содержимое остается в силе.
#include <iostream>
#include<string>
using namespace std;
const string &getString(const string &s)
{
string tmp = s;
return tmp;
}
string goodByeString(const string &s)
{
string tmp = "lala";
tmp += s;
return tmp;
}
int main()
{
const string &a = getString("Hello World!\n");
string b = goodByeString("ciao\n");
cout << a << endl;
return 0;
}