Бнопня по C++

Oct 01, 2016 04:42

Засада. Как вы думаете, какая C++ (11) функция может быть быстрее при достаточно развесистом классе Foo?

size_t DirectSize(Foo && foo) {
auto v = std::vector{std::move(foo)};
return v.size();
}

size_t IndirectSize(Foo && foo) {
auto v = construct_vector(std::move(foo));
return v.size();
}

при условии, что construct_vector() - это ( Read more... )

Leave a comment

Comments 76

usovalx October 1 2016, 17:00:51 UTC
Первый как минимум один раз скопирует, когда будет создавать вектор из списка. Вот правда прямо сейчас не угадаю будет ли вторая копия когда создается initializer_list.

Второй вариант может протащить foo без копирования.

Reply


nponeccop October 1 2016, 19:19:58 UTC
Я С++ не знаю, поэтому отвечу общими словами о применении стандарта и переносимости ( ... )

Reply

blackyblack October 1 2016, 20:21:24 UTC
Ну так на любой вопрос по оптимизации ответ будет: "А вы профайлером смотрели?"

Reply

nponeccop October 1 2016, 20:27:56 UTC
В ряде случаев код можно переписать так, чтобы усилить минимальную гарантированную стандартом производительность. Так что не всегда.

Reply


thesz October 3 2016, 11:27:29 UTC
Отсутствуют "this poll sucks" и "какой C++ в 2016?"

Reply


ext_1301353 October 4 2016, 00:13:13 UTC
construct_vector не обязан возвращать вектор, можно вернуть любую структуру с определенным size(), например специальную структуру, хранящую только размер.

Reply


Leave a comment

Up