Означают ли они то же самое?
Universal reference был термин Скотт Мейерс придуман для описания концепции принятия ссылки RValue на CV-неквалифицированным параметр шаблона, который затем можно вывести либо в виде значения или именующая ссылка.
В то время, когда стандарт C++ не имел специального термина для этого, что было надзором на C++ 11 и затрудняет его обучение. Это упущение было исправлено путем N4164, который добавил следующее определение в [temp.deduct]:
Ссылка пересылки является ссылкой на Rvalue к CV-неквалифицированным параметру шаблона. Если P
является ссылкой для пересылки, а аргумент является значением l, то вместо значения типа A для типа используется тип «lvalue reference to A».
Следовательно, два означают одно и то же, а текущий стандартный термин С ++ пересылает ссылку. В самой статье говорится, почему «ссылка на пересылку» является лучшим термином, чем «универсальная ссылка».
Является ли это только ссылкой пересылки, если тело функции вызывает std::forward
?
Нет, что вы делаете с ссылкой на пересылку, не имеет никакого отношения к названию. Упоминание экспедиторская понятие относится просто к тому, как тип T
выводится в:
template <class T> void foo(T&&); // <==
Он не должен быть впоследствии пересылаются.
См. Https://isocpp.org/blog/2012/11/universal-references-in-c11-scott-meyers для получения некоторого исходного материала. –
@SamVarshavchik Вы действительно читали вопрос или этот блог? – Barry