В книге «Эффективный современный C++», в пункте 3 там написано этот кусок кода:C++ станд :: вперед оператора контейнера вызова []
template<typename Container, typename Index>
decltype(auto)
authAndAccess(Container&& c, Index i)
{
authenticateUser();
return std::forward<Container>(c)[i];
}
Я не понимаю, почему вы позвонить std::forward
? Если c
является ссылкой на rvalue, что он изменит, чтобы вызвать operator[]
на rvalue вместо lvalue? Для меня должно быть достаточно c[i]
.
PS: Я понимаю цель std::forward
, когда переменная является параметром функции, как:
template<typename T, typename... Ts>
std::unique_ptr<T> make_unique(Ts&&... params)
{
return std::unique_ptr<T>(new T(std::forward<Ts>(params)...));
}
Я думаю, что компилятор знает, что c является rvalue ref, ваш ответ будет применим, если && в параметрах шаблона, или я что-то не хватает? – Incomputable
c становится значением lval после установки переменной. – Thomas