Разрешена ли эта оптимизация стандартом C ++ 0x?
Нет.
Используют ли ее компиляторы?Даже в сложных случаях, т. Е. Функция состоит из нескольких строк?
Нет.
Насколько надежна эта оптимизация, т. Е. Могу ли я ожидать, что компилятор ее использует?столько, сколько я ожидаю, что компилятор будет применять Оптимизацию возвращаемого значения?
Вы должны украсить A(const A&)
и A(A&&)
с помощью операторов печати и выполнить интересующие вас тестовые примеры.Не забудьте протестировать аргументы lvalue, если эти варианты использования являются частью вашего проекта.
Правильные ответы будут зависеть от того, насколько дорого стоят копирование и перемещение A
, сколько аргументов Object::value
на самом деле имеети сколько повторений кода вы готовы выдержать.
Наконец, будьте очень подозрительными любого руководства, содержащего такие слова, как "всегда" или "везде".Например, я использую goto
время от времени.Но у других программистов такие слова, как «никогда», ассоциируются с goto
.Но время от времени вы не можете превзойти goto
как по скорости, так и по четкости.
Бывают моменты, когда вам стоит отдать предпочтение паре foo(const A&) foo(A&&)
вместо foo(A)
.И раз ты не будешь.Ваши эксперименты с декорированными копиями и движущимися участниками помогут вам.