Доверие оптимизации возвращаемого значения

Как Вы идете об использовании оптимизации возвращаемого значения?
Есть ли какие-либо случаи, где я могу доверить современный компилятор для использования оптимизации, или я должен всегда идти безопасным путем и возвращать указатель некоторого типа/использования ссылка как параметр?

Там кто-либо - известные случаи где наклон оптимизации возвращаемого значения быть сделанным?, Кажется мне, что оптимизация возвращаемого значения была бы довольно легка для компилятора работать.

6
задан James McNellis 13 July 2010 в 17:26
поделиться

3 ответа

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

Вы правы, оптимизация - это , довольно легче для компилятора для выполнения, именно поэтому компиляторы почти всегда делают это. Единственные случаи, когда он «не может быть сделан», являются те, где оптимизация не применяется: RVO применяется только при возврате неназванного временного. Если вы хотите вернуть именованную локальную переменную, вместо этого применяется NRVO, и пока он немного сложнее для реализации компилятора, это выполнимо, а современные компиляторы не имеют проблем с этим.

8
ответ дан 8 December 2019 в 14:43
поделиться

Чтобы возникнуть лучший шанс, вы можете вернуть объект, сконструированный непосредственно в оператор возврата [может кто-нибудь помнить имя для этой идиомы - я забыл его]:

Foo f() {
    ....
    return Foo( ... );
}

, но как и со всеми оптимацией, Компилятор всегда может выбрать не делать этого. И в конце дня, если вам нужно вернуть значение, то нет альтернативы доверять компилятору - указателям и ссылкам не сократит его.

2
ответ дан 8 December 2019 в 14:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: