// return by value
std::string getFoo() {
const std::string& myStr = getBar();
return myStr;
}
std::string myString = getFoo();
std::string& myString = getFoo(); // this is bad - dangling pointer
< /code>
Я предполагаю, что приведенный ниже код также действителен только потому, что возвращаемое значение немедленно присваивается переменной, что устраняет опасность висящего указателя: < /p>
// return by reference
std::string& getFoo() {
const std::string& myStr = getBar();
return myStr;
}
std::string myString = getFoo();
std::string& myString = getFoo(); // this is bad - dangling pointer
Код ниже, по -видимому, работает просто нормально, так как функция возвращается по значению: < /p> [code]// return by value std::string getFoo() {
const std::string& myStr = getBar();
return myStr; }
std::string myString = getFoo(); std::string& myString = getFoo(); // this is bad - dangling pointer < /code> Я предполагаю, что приведенный ниже код также действителен только потому, что возвращаемое значение немедленно присваивается переменной, что устраняет опасность висящего указателя: < /p> // return by reference std::string& getFoo() {
const std::string& myStr = getBar();
return myStr; }
std::string myString = getFoo(); std::string& myString = getFoo(); // this is bad - dangling pointer [/code] Являются ли эти примеры законными?