Nie ma sposobu na optymalizację RVO złamać obietnica const
, więc nie ma problemu: można wykonać RVO.
Jednak ruch semantyka wpływa const
. Skutecznie wyłącza semantykę przenoszenia, czyli wywołania konstruktora T(T&&)
lub operatora przypisania przeniesienia. Więc na ogół nie używaj const
dla zwracanej wartości.
Scott Meyers pierwotnie polecił const
dla zwracanych wartości, dla bardziej rozsądnego kodowania.
Następnie Andrei Alexandrescu, w swoim artykule Mojo dla DDJ, zauważył, że odtąd, z ruchem semantyki, const
na wartościach zwrotu powinno być lepiej zbanowane, a wcześniejsza rada Scotta zignorowana.
Teraz nigdy nie zadałem sobie trudu, aby nauczyć się różnych specjalistycznych akronimów RVO, takich jak NRVO i tak dalej. Głównym powodem jest to, że zmieniono znaczenie w znaczeniu, początkowo mającym jedno znaczenie z pewną niestandardową funkcjonalnością w kompilatorze g ++. Terminologia tutaj jest po prostu bałaganem.
Tak więc, jeśli moja terminologia jest zła i naprawdę powinienem użyć innego akronimu, prosimy o poprawienie! :-)
Dlaczego nie uwzględnisz wyników eksperymentów z co najmniej jednym kompilatorem? –
@MarcGlisse: Cóż, Visual C++ 2008 ją zoptymalizował, ale nie jestem pewien, czy standard rzeczywiście pozwala na to, czy nie. – Mehrdad