Что такое 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 чуть подробнее в этом ответе.

→ Ссылка