Следующая функция принимает строку в качестве аргумента и возвращает другую после некоторой обработки.
Достаточно ли справедливо предположить, что компилятор выполнит оптимизацию перемещения, и я не буду копировать содержимое строки после каждого вызова? Должна ли эта функция следовать copy elision [(N)RVO]?
Целесообразно ли это на практике?
std::string foo(std::string const& s)
{ // Perform sanity check on s
// ...
std::stringstream ss;
// do something and store in ss
// ...
return ss.str();
}
Потому что в противном случае я обычно следую практике возврата строк по ссылке. Итак, сигнатура моей функции была бы такой:
void foo (std::string const& inValue, std::string& outValue);
s
в этотstringstream
, то я почти уверен, что он будет скопирован при входе и скопирован при выходе. - person Galik   schedule 02.02.2016return std::move(ss).str()
на тот случай, если ваша реализация оптимизирует этот случай (еще не уверен, что это возможно). - person Marc Glisse   schedule 02.02.2016