Que tipo declarar para evitar a cópia e garantir que o valor retornado seja movido

Suponha que

Eu tenho uma funçãoA f();Eu quero inicializar uma variável locala para o valor de retorno def;Eu não quero confiar no RVO;

Qual é a melhor opção (e por quê) para evitar o valor de retorno def sendo copiado quando

a pode ter que ser modificadoEu sei dissoa não será modificado

Opções:

a)A a = f(); b)A&& a = f(); c)const A& = f(); d)const A&& = f();

EDITAR:

Eu diria:

b)c)

Porque ambos usam referências e evitam uma cópia extra (que também pode ser evitada pelo RVO, mas isso não é garantido). Então, como eu vejo a opção a) sugerida a maior parte do tempo?

Eu acho que o coração da questão é: eu entendo que a) provavelmente tem o mesmo efeito que c), então por que não usar c) em vez de a), para tornar as coisas explícitas e independentes no compilador?

questionAnswers(2)

yourAnswerToTheQuestion