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.

questionAnswers(2)

yourAnswerToTheQuestion