2015-07-18 2 views
-2

Я бегу следующий простой программы в C++ программе:Почему ссылка на локальную переменную остается в силе

#include <iostream> 
using namespace std; 
string& ShowString() 
{ 
    string s1 = "abcd"; 
    return s1; 
} 
int main() 
{ 
    string s2 = ShowString(); 
    cout << s2 << endl; 
    return 0; 
} 

и выход: abcd

Проблема заключается в том, что функция ShowString возвращает ссылку к локальная переменная и к тому времени, когда программа достигнет cout << s2 << endl, s1 должен был быть уничтожен (а также s2). Но вывод по-прежнему верен, что приводит меня к выводу, что, хотя s1 больше не существует, его содержимое в стеке памяти все еще действует (возможно, до тех пор, пока что-то его не перезапишет).

Я ценю, если вы могли бы сообщить мне, правильный ли этот вывод.

Thanks

ответ

2

Потому что это неопределенное поведение. Вы не можете доверять этому значению.

Смежные вопросы