Пространства имён
Варианты
Действия

std::move

Материал из cppreference.com
< cpp‎ | utility


Определено в заголовочном файле <utility>
template< class T >
typename std::remove_reference<T>::type&& move( T&& t );
(начиная с C++11)
std::move получает RValue ссылкой на свой аргумент. RValue ссылки в противном случае производится только временные объекты, так библиотечный код, который передается RValue ссылка на ресурс-объект-владелец имеет право (но не обязан) для перемещения' ресурсов из аргументов для того, чтобы запустить более быстро, оставив спор с пустым значением. Код библиотеки требует, чтобы оставить допустимое значение в аргументе, но если вид или функции документов в противном случае, нет никаких других ограничений на полученное значение аргумента. Это означает, что это вообще мудрым, чтобы избежать использования переехал из аргументов снова. Если у вас есть использовать его снова, убедитесь, что повторно инициализировать его с известным значением, прежде чем делать так.
Оригинал:
std::move obtains an rvalue reference to its argument. Rvalue references are otherwise only produced by temporary objects, so library code that's passed an rvalue reference to a resource-owning object has the option (but isn't required) to move the resource out of the argument in order to run more quickly, leaving the argument with an empty value. The library code is required to leave a valid value in the argument, but unless the type or function documents otherwise, there are no other constraints on the resulting argument value. This means that it's generally wisest to avoid using a moved from argument again. If you have to use it again, be sure to re-initialize it with a known value before doing so.
Текст был переведён автоматически через Google Translate.
Вы можете проверить и исправить перевод. Для инструкций кликните сюда.

Содержание

[править] Параметры

t -
Объект должен быть перемещен
Оригинал:
the object to be moved
Текст был переведён автоматически через Google Translate.
Вы можете проверить и исправить перевод. Для инструкций кликните сюда.

[править] Возвращаемое значение

static_cast<typename std::remove_reference<T>::type&&>(t)

[править] Исключения

noexcept-спецификация:  
noexcept
  (начиная с C++11)

[править] Пример

#include <iostream>
#include <utility>
#include <vector>
#include <string>
int main()
{
    std::string str = "Hello";
    std::vector<std::string> v;
 
    // uses the push_back(const T&) overload, which means
    // we'll incur the cost of copying str
    v.push_back(str);
    std::cout << "After copy, str is \"" << str << "\"\n";
 
    // uses the rvalue reference push_back(T&&) overload,
    // which means no strings will copied; instead, the contents
    // of str will be moved into the vector.  This is less
    // expensive, but also means str might now be empty.
    v.push_back(std::move(str));
    std::cout << "After move, str is \"" << str << "\"\n";
 
    std::cout << "The contents of the vector are \"" << v[0]
                                         << "\", \"" << v[1] << "\"\n";
}

Вывод:

After copy, str is "Hello"
After move, str is ""
The contents of the vector are "Hello", "Hello"

[править] Сложность

Константная.

[править] См. также

(C++11)
Вперед аргумента функции
Оригинал:
forwards a function argument
Текст был переведён автоматически через Google Translate.
Вы можете проверить и исправить перевод. Для инструкций кликните сюда.

(шаблон функции) [edit]
получает RValue ссылку, если движение конструктор не бросают
Оригинал:
obtains an rvalue reference if the move constructor does not throw
Текст был переведён автоматически через Google Translate.
Вы можете проверить и исправить перевод. Для инструкций кликните сюда.

(шаблон функции) [edit]