Коллекция фильтров недоступна в * некоторых * версиях IE9

Я не хочу возвращать скопированное значение, потому что оно неэффективно

Докажите его.

Посмотрите на RVO и NRVO, а в C + + 0x move-semantics. В большинстве случаев в C ++ 03 параметр out - это просто хороший способ сделать ваш код уродливым, а в C ++ 0x на самом деле вы будете болеть сами, используя параметр out.

Просто напишите чистый код, верните его значение. Если производительность является проблемой, профилируйте ее (прекратите гадание) и найдите, что вы можете сделать, чтобы исправить ее. Вероятно, это не приведет к возврату вещей из функций.


Тем не менее, если вы мертвы для написания подобным образом, вы, вероятно, захотите сделать параметр out. Это позволяет избежать динамического распределения памяти, что является более безопасным и, как правило, быстрее. Это требует, чтобы у вас был какой-то способ построить объект до вызова функции, что не всегда имеет смысл для всех объектов.

Если вы хотите использовать динамическое распределение, то самое меньшее, что можно сделать, это поместите его в умный указатель. (Это должно быть сделано все время в любом случае). Тогда вы не беспокоитесь о том, чтобы удалять что-либо, вещи безопасны для исключений и т. Д. Единственная проблема - это, скорее всего, медленнее, чем возвращение по значению в любом случае!

-8
задан Community 23 May 2017 в 10:29
поделиться