move
Безусловно приводит свой аргумент к ссылке rvalue, тем самым указывая, что его можно переместить, если его тип допускает перемещения.
template<class Type>
typename remove_reference<Type>::type&& move(Type&& Arg) noexcept;
Параметры
Параметр |
Описание |
---|---|
Type |
Тип, выведенный из типа аргумента, переданного в Arg, а также правила сворачивания ссылок. |
Arg |
Аргумент для приведения. Несмотря на то, что тип Arg определен как ссылка rvalue, move также принимает аргументы lvalue, поскольку ссылки lvalue можно привязать к ссылкам rvalue. |
Возвращаемое значение
Arg используется в качестве ссылки rvalue вне зависимости от того, является ли его тип ссылочным.
Заметки
Аргумент шаблона Type следует не задавать явным образом, но выводить из типа значения, переданного в Arg. Тип Type дополнительно адаптируется в соответствии с правилами сворачивания ссылок.
move не перемещает свой аргумент. Вместо этого, путем безусловного приведения аргумента (который может являться ссылкой lvalue) к ссылке rvalue он обеспечивает компилятору возможность впоследствии переместить, а не скопировать значение, переданное в Arg, если его тип допускает перемещение. Если тип значения не допускает перемещения, значение копируется.
Если значение, переданное в Arg, является ссылкой lvalue, то есть его имя или адрес можно получить, при перемещении оно становится недействительным. Не создавайте ссылки на значение, переданное в Arg, по имени или адресу после перемещения.
Требования
Заголовок: <utility>
Пространство имен: std