#cpp #cpp14
std::vectorfun() { std::vector temp; for(...) { // заполняем "temp" чем-либо } return temp; } std::vector testVec = fun(); или void fun(std::vector & vec) { for(...) { // заполняем "vec" чем либо } } std::vector testVec; fun(testVec); Как будет лучше, быстрее и вообще - как правильно вернуть контейнер? p.s. Прочитал кучу статей на эту тему на зарубежном "стэке", но там все темы старые, а уже вышел с++14 и 2016 год на дворе, хотелось бы услышать советы и мнения "экспертов" по с++, с учетом новых стандартов, в общем поделитесь пожалуйста опытом.
Ответы
Ответ 1
Здесь отличия скорее не технические - как быстрее (как вам уже ответили, практически одинаково), а семантические. Например, если в функции вы вносите какие-то элементы в вектор, то в первом варианте вы можете вносить их только в изначально пустой вектор, а во втором варианте - дополнять уже непустой вектор. Словом, поступайте так, как правильнее с точки зрения логики программы :)Ответ 2
В контексте этого вопроса, в С++14 ничего существенно не поменялось по сравнению с С++11. Используйте первый вариант, тогда либо оптимизатор сделает NRVO (частный случай copy elision), либо произойдет вызов перемещающего конструктора, т.к. в return temp; выражение temp считается r-value. Подробнее можно почитать в этом вопросе.
Комментариев нет:
Отправить комментарий