Рассмотрим этот код:
#include <iostream>
using namespace std;
void Func(int&& i) {
++i;
}
int main() {
int num = 1234;
cout << "Before: " << num << endl;
Func(std::move(num));
cout << "After: " << num << endl;
}
Его вывод:
Before: 1234
After: 1235
Ясно, что i
изменяется внутри Func
, так как он привязан к параметру i
после того, как был "преобразован" в ссылку r-значения с помощью std::move
.
Ну, моя точка зрения:
Перемещение объекта означает передачу права собственности на ресурсы с одного объекта на другой. Однако встроенные типы не содержат ресурсов, поскольку сами являются ресурсами. Нет смысла передавать ресурсы, которыми они владеют. Как показано в примере, значение num
изменяется. Его ресурс, его «я» — это то, что модифицируется.
Есть ли у встроенных типов семантика перемещения?
Кроме того, имеют ли объекты встроенного типа после перемещения (если это так) четко определенное поведение?
std::move
не двигается. В вашем примере нет ни одного перехода между выходами. - person R. Martinho Fernandes   schedule 04.02.2013std::move(some_lvalue)
приводит lvalue к rvalue, тем самым разрешая последующее перемещение. и Перемещение выполняется исключительно конструктором перемещения, а неstd::move
, и не просто привязывая rvalue к ссылке rvalue. - person fredoverflow   schedule 04.02.2013