Запрошенное краткое объяснение правил свертывания ссылок: (1) A & & -> A &, (2) A & && -> A &, (3) A && & -> A & и (4) A && && -> A &&
Следующая ссылка предоставляет 4 формы свертывания ссылок (если ям правильно, что это только 4 формы):http://thbecker.net/articles/rvalue_references/section_08.html.
Из ссылки: A &
& становится A & A & && становится A & A && & становится A & A && && становится A &&Хотя я могу сделать обоснованное предположение, я хотел бы получить краткое объяснение обоснования каждого из этих правил свертывания ссылок.
Смежный вопрос, если можно так: используются ли эти правила свертывания ссылокв C ++ 11 внутренне такими утилитами STL, как,std::move()
std::forward()
и тому подобное, в типичных реальных случаях использования? (Примечание: яЯ специально спрашиваю, используются ли правила свертывания ссылок в C ++ 11, в отличие от C ++ 03 или более ранних.)
Я задаю этот связанный вопрос, потому что мне известны такие утилиты C ++ 11, какstd::remove_reference
, но я не знаю, если ссылки, связанные утилиты, такие какstd::remove_reference
обычно используются в C ++ 11 дляизбегать необходимости правила свертывания ссылок, или они используютсяв сочетании с правила свертывания ссылок.