Можно создать дубликат:
how to “return an object” in C++C вектор ++, обратный по сравнению с параметром
мне интересно, если есть разница между тремя следующими подходами:
void FillVector_1(vector<int>& v) {
v.push_back(1); // lots of push_backs!
}
vector<int> FillVector_2() {
vector<int> v;
v.push_back(1); // lots of push_backs!
return v;
}
vector<int> FillVector_3() {
int tab[SZ] = { 1, 2, 3, /*...*/ };
return vector<int>(tab, tab + SZ);
}
в исполнении? – Anycorn
Просто возвращайтесь по цене и беспокоитесь о производительности, когда чувствуете, что это на самом деле проблема. Затем профиль, чтобы вам не приходилось гадать. Я упреждающе закрываю [дубликат] (http://stackoverflow.com/questions/3350385/how-to-return-an-object-in-c). – GManNickG
Я бы не проголосовал, чтобы закрыть это как дубликат по нескольким причинам: (1) Более ранний вопрос имел особенности распределения динамической памяти, которые не применяются к этому вопросу, и (2) этот вопрос является специфичным для STL, который может вызывать другие идиомы, такие как вставки итераторов. Кроме того, некоторые реализации STL уже используют ссылки на C++ 0x r-value для минимизации копирования. Этот метод не применяется в предыдущем вопросе. –