Следующий пример кода поведение не определено ..Неопределенное поведение станд :: строка при c_str() используется
char * getName()
{
std::string name("ABCXYZ");
return name.c_str();
}
Это потому, что название выходит из области видимости. Но я хотел понять, как это происходит, когда мы возвращаем std :: string и не порождает неопределенное поведение?
Если вы вернете его ('std :: string') по значению, он будет скопирован/удален, так что это не UB. – tkausl
По всей вероятности, возврат строки 'std :: string' даже не скопировал бы что-либо; возвращаемое значение будет создано, когда это возможно. C++ 17 даже иногда это гарантирует. Если это невозможно сделать, строка, по крайней мере, будет удалена, а не скопирована. На самом деле не о чем беспокоиться. – chris
Это хорошо известная директива C++, в которой вы никогда не должны возвращать локальные объекты по ссылке (или указателю). Вы можете больше узнать об этом в Effective C++, но объяснение Дэвида Шварца охватывает большинство из них. –