Как Вы идете об использовании оптимизации возвращаемого значения?
Есть ли какие-либо случаи, где я могу доверить современный компилятор для использования оптимизации, или я должен всегда идти безопасным путем и возвращать указатель некоторого типа/использования ссылка как параметр?
Там кто-либо - известные случаи где наклон оптимизации возвращаемого значения быть сделанным?, Кажется мне, что оптимизация возвращаемого значения была бы довольно легка для компилятора работать.
Всякий раз, когда оптимизация компилятора включена (и в большинстве компиляторов, даже когда оптимизация отключено ), пройдет RVO. NRVO немного менее распространена, но большинство компиляторов будут выполнять эту оптимизацию, по крайней мере, когда оптимизация включена.
Вы правы, оптимизация - это , довольно легче для компилятора для выполнения, именно поэтому компиляторы почти всегда делают это. Единственные случаи, когда он «не может быть сделан», являются те, где оптимизация не применяется: RVO применяется только при возврате неназванного временного. Если вы хотите вернуть именованную локальную переменную, вместо этого применяется NRVO, и пока он немного сложнее для реализации компилятора, это выполнимо, а современные компиляторы не имеют проблем с этим.
Чтобы возникнуть лучший шанс, вы можете вернуть объект, сконструированный непосредственно в оператор возврата [может кто-нибудь помнить имя для этой идиомы - я забыл его]:
Foo f() {
....
return Foo( ... );
}
, но как и со всеми оптимацией, Компилятор всегда может выбрать не делать этого. И в конце дня, если вам нужно вернуть значение, то нет альтернативы доверять компилятору - указателям и ссылкам не сократит его.