Tipos embutidos têm semântica de movimento?
Consideraristo código:
#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;
}
Sua saída é:
Before: 1234
After: 1235
Claramente,i
está sendo modificado dentroFunc
, como está vinculado ao parâmetroi
depois de ser "convertido" para uma referência de valor r porstd::move
.
Bem, meu ponto:
Mover um objeto significa transferir a propriedade de recursos de um objeto para outro. No entanto, tipos incorporadossegura sem recursos porque eles próprios são os recursos. Não faz sentido transferir os recursos que eles possuem. Como mostrado pelo exemplo,num
O valor de s é modificado. Seu recurso, seu eu, é aquele que está sendo modificado.
Tipos embutidos têm semântica de movimento?
Além disso, os objetos do tipo interno depois que ele é movido (se for) um comportamento bem definido?