2016-01-14 2 views
4

Предположив У меня есть две функции, один, как:Когда функция функции функции функции отключается?

const char* getstr() 
{ 
    std::string s = "somestring"; 
    return s.c_str(); 
} 

второй как:

void func(int x, const char* str) 
{ 
    std::cout <<"x="<<x <<", str=" <<str<<std::endl; 
} 

А теперь предположим, 'FUNC()' с чем-то вроде

func(100,getstr()); 

Мой вопрос, когда будет ли отключен стек функций для функции getstr()? После того, как тело «func()» выполнено или до того, как произойдет выполнение тела?

Я спрашиваю об этом, потому что какой-то гений в моей команде написал этот тип функции «getstr()». и как-то система не рушится.

Мое понимание заключалось в том, что стек для функции «getstr()» будет размотан, как только этот параметр будет оценен. Но если бы это было так, то код бы разбился и этого не произошло.

Может кто-нибудь помочь мне, что говорит стандарт C++?

+0

Это происходит, когда 'getstr' заканчивается. У вас есть неопределенное поведение, все может случиться, в том числе появляться, как и следовало ожидать. – Praetorian

+2

Подсказка: неопределенное поведение означает, что все может случиться непредсказуемо. Это включает: сбой, удаление жесткого диска и даже притворство работать тысячу раз подряд, а затем открытие youtube на 1001-й попытке. –

+0

'какой-то гений в моей команде написал этот тип« getstr() »function' Является ли эта функция именно тем, что они написали? Они могут выделять кучу/бесплатное хранилище. – Levi

ответ

1

s уничтожен до getstr возвращается. Указатель, который возвращает getstr, свисает.

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