Explicação concisa das regras de recolhimento de referência solicitadas: (1) A & & -> A &, (2) A & && -> A &, (3) A && & -> A &, e (4) A && && -> A &&
O link a seguir fornece as 4 formas de referência em colapso (se eu estiver correto em afirmar que essas são as únicas 4 formas):http://thbecker.net/articles/rvalue_references/section_08.html.
A partir do link:
A & & torna-se A &A & && torna-se A &A && & torna-se A &A && && torna-se A &&Embora eu possa fazer um palpite, gostaria de uma explicação concisa para a lógica por trás de cada uma dessas regras de colapso de referência.
Uma questão relacionada, se eu puder: Essas regras de referência colapsadas são utilizadas?em C ++ 11 internamente por tais utilitários STL, comostd::move()
, std::forward()
e afins, em casos de uso típicos do mundo real? (Observação: estou perguntando especificamente se as regras de referência de recolhimento são utilizadas no C ++ 11, em oposição ao C ++ 03 ou anterior).
Eu faço esta pergunta relacionada porque estou ciente de tais utilitários C ++ 11 comostd::remove_reference
, mas não sei se os utilitários relacionados à referência, comostd::remove_reference
são rotineiramente usados em C ++ 11 paraevitar a necessidade de as regras de colapso de referência, ou se elas são usadasem conjunção com as regras de colapso de referência.