Я использовал две нижеприведенные функции для тестирования рекурсивной оптимизации Tail в MSVC08
int TailRecursively1(int i)
{
return TailRecursively1(i);
}
int TailRecursively2(std::string str)
{
return TailRecursively2(str);
}
почему TailRecursively1 был оптимизирован, а TailRecursively2 вызвал переполнение стека?
Потому что есть вызовы для конструктора и деструктора копирования std :: string при отправке параметра str по значению в TailReucrsively2?
(Я не уверен на 100% в этом)
Других решений пока нет …