Предположив У меня есть две функции, один, как:Когда функция функции функции функции отключается?
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++?
Это происходит, когда 'getstr' заканчивается. У вас есть неопределенное поведение, все может случиться, в том числе появляться, как и следовало ожидать. – Praetorian
Подсказка: неопределенное поведение означает, что все может случиться непредсказуемо. Это включает: сбой, удаление жесткого диска и даже притворство работать тысячу раз подряд, а затем открытие youtube на 1001-й попытке. –
'какой-то гений в моей команде написал этот тип« getstr() »function' Является ли эта функция именно тем, что они написали? Они могут выделять кучу/бесплатное хранилище. – Levi