Какой самый эффективный способ реализовать возвращаемое вычисленное значение в C ++?

С появлением ссылок на 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 (). Есть идеи, как улучшить, или я тоже должен оставить в покое?

  • Кен
5
задан kfmfe04 3 October 2011 в 13:23
поделиться