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á modificadoOpçõ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?