Что такое auto&&?
Что такое auto&&? Как выводится тип такой переменной?
Ответы (1 шт):
Автор решения: dIm0n
→ Ссылка
auto&& почти всегда означает forwarding reference.
То есть вывод типа auto&& тут:
auto&& x = expression;
почти эквивалентен выводу типа T&& тут:
template <typename T>
void foo(T&& x) {}
foo(expression);
Исключение — список инициализации в фигурных скобках:
auto&& x = {1, 2, 3}; // OK
auto&& y{1, 2, 3}; // ERROR
template <typename T>
void foo(T&& x) {}
foo({1, 2, 3}); // ERROR
foo(std::initializer_list<int>{1, 2, 3}); // OK
auto&& в параметре лямбды эквивалентно T&& без исключений.
Про forwarding reference чуть подробнее в этом ответе.