Автоматическое удержание типа и авто & amp; & amp; против авто

Я просто смотрел Скотта Мейерса Универсальные ссылки на C ++ 11 и была одна вещь, которую я не мог понять.

Я немного запутался в том, что разница между auto как «универсальный эталон», т.е. auto&& и регулярный autoкогда они отличаются?

Foo f;
Foo& lvr = f;

auto lvr_a = f; // Foo&
auto rvr_a = std::move(f); // Foo&& or is it Foo?

auto&& lvr_b = f; // Foo& && => Foo&
auto&& lvr_b = std::move(f); // Foo&& && => Foo&&

1

Решение

auto преобразуется в тип значения (т. е. принимает копию с помощью конструктора копирования), тогда как auto&& сохранит ссылочный тип.

Посмотреть здесь: C ++ 11: Стандартный ref для действия `auto` на константный и ссылочный типы

auto rvr_a = std::move(f); // Foo&& or is it Foo?

Это просто Foo, Так что это так же, как:

Foo rvr_a = std::move(f); // Foo&& or is it Foo?

Но обратите внимание, это все равно вызовет конструктор перемещения, если он есть.

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]