Który typ deklarować, aby uniknąć kopiowania i upewnić się, że zwracana wartość jest przenoszona

Przypuszczam, że

Mam funkcjęA f();Chcę zainicjować zmienną lokalnąa do wartości zwracanejf;Nie chcę polegać na RVO;

Jaka jest najlepsza opcja (i dlaczego), aby uniknąć zwracanej wartościf kopiowane kiedy

a może wymagać modyfikacjiwiem toa nie zostanie zmodyfikowany

Opcje:

za)A a = f(); b)A&& a = f(); do)const A& = f(); re)const A&& = f();

EDYTOWAĆ:

Powiedziałbym:

b)do)

Ponieważ oba używają odwołań i unikają dodatkowej kopii (której RVO również mogłoby uniknąć, ale nie jest to gwarantowane). Dlaczego więc widzę opcję a) sugerowaną przez większość czasu?

Wydaje mi się, że sedno pytania brzmi: rozumiem, że a) najprawdopodobniej ma taki sam efekt jak c), więc dlaczego nie użyć c) zamiast a), aby rzeczy były wyraźne i niezależne od kompilatora?

questionAnswers(2)

yourAnswerToTheQuestion