В следующем &&
универсальная ссылка?
template <class Function = std::greater<int> > void f(Function&& f = Function());
Семестр universal reference
это выдуманный Скоттом Мейерсом термин, делающий различие между обычными ссылочными значениями, т. е. int&&
и rvalue ссылки в коде шаблона, т.е. T&&
, Это важно из-за правил свертывания ссылок, которые вступают в игру с кодом шаблона, поэтому этот термин используется для помощи в обучении. Причина это называется unversal reference
потому что это может связывать с чем угодно.
Просто имейте в виду, что нет такой вещи как universal reference
на языке C ++, Function&&
это Rvalue ссылка что касается языка. Тем не менее, да, в терминологии Скотта Мейера, Function&&
это universal reference
в вашем примере.
является && универсальная ссылка?
Вроде, как бы, что-то вроде. Как пасхальный кролик и Санта-Клаус, на самом деле не существует такой вещи, как универсальная ссылка (извините, если я испортил это для вас). Семестр универсальная ссылка не отображается в стандарте. Это термин, придуманный Скоттом Мейерсом, для описания шаблонных ссылок на значения, когда активны «специальные правила вывода».
Что вы показываете является действительный код И в этом случае применяются специальные правила удержания. То есть, когда вы передаете аргумент lvalue A
в f
, Function
выведет к A&
, Так что по определению Скотта, да, Function
это «универсальная ссылка».
Похоже на то, std::forward<Function>
правильно передает тип аргумента при вызове в вашей функции.