Предположим, что у меня есть следующий код:
int main()
{
std::vector<std::string> strs;
std::string var("Hello World");
// Make some modifications to 'var'
strs.push_back(std::move(var));
}
Часть образца, которую я хочу указать, - это использование std::move()
. В основном меня беспокоит копия на вызов push_back()
. Предположим, что строка, которую я добавляю, действительно большая. Я все еще изучаю ссылки на С++ 11 r-value, поэтому я не уверен, как компилятор будет оптимизировать копию (если вообще) без std::move()
.
Может ли кто-нибудь объяснить, является ли это преждевременной оптимизацией (форсирование ходов во всех случаях, когда вы хотите вообще избежать копий)? Если да, то какие шаблоны я должен ожидать, что компилятор будет следовать (или, скорее всего, следовать), что приведет к оптимизации и автоматическому перемещению здесь?
ИЗМЕНИТЬ
Я хочу добавить, что я понимаю, как происходит автоматическое перемещение по возвращаемым значениям функции, поскольку применяется NRVO/RVO. В конкретном примере, который я привел здесь, не будет применяться RVO, поэтому я не уверен.