Когда конструктор перемещения вызывается в функции `std:: move()`?
Функция std::move()
определяется как
template<typename T>
typename std::remove_reference<T>::type&& move(T && t)
{
return static_cast<typename std::remove_reference<T>::type&&>( t );
}
Есть четыре места, где я могу представить, как будет вызываться конструктор перемещения:
- Когда передается параметр.
- Когда выполняется трансляция.
- Когда возвращается результат.
- Не в самой функции
std::move()
, а, возможно, в том месте, где в конечном итоге возвращается возвращаемая ссылка.
Я бы поставил на номер 4, но я не уверен на 100%, поэтому, пожалуйста, объясните свой ответ.
Ответы
Ответ 1
Движение не происходит. std::move()
принимает ссылку и возвращает ссылку. std::move()
- это в основном просто актерский состав.
Ваше предположение 4. является правильным (предполагая, что вы на самом деле вызываете конструктор перемещения в конце).
Ответ 2
std:: move - это просто тип, он сообщает компилятору, что тип является rvalue.