С появлением ссылок на rvalue поверх оптимизации возвращаемого значения, какой способ реализации такой базовой функции был бы наиболее эффективным? Как я могу улучшить эту реализацию или оставить ее в покое?
template <typename T>
string
to_string(const T& t)
{
stringstream ss;
ss << t;
return ss.str();
}
Очевидно, я хочу избежать копирования или выделения памяти, если это возможно. TIA.
Edit: Спасибо Д. Родригесу за подробный ответ. А теперь у меня вторая часть моего вопроса. Есть ли способ улучшить это?
#define to_cstr( T ) (to_string( T ).c_str())
Конечно, я хотел бы по возможности избегать использования МАКРОСОВ, но если я скопирую и вставлю приведенный выше код шаблона, чтобы вернуть ss.str (). C_str () и const char *, временное не живет достаточно долго; хотя код вроде работает, valgrind жалуется (красный свет).
Я не смог придумать более чистого решения, чем МАКРОС выше для to_cstr (). Есть идеи, как улучшить, или я тоже должен оставить в покое?