Betrachten this Code:Haben eingebaute Typen eine Bewegungssemantik?
#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;
}
Sein Ausgang ist:
Before: 1234
After: 1235
Offensichtlich i
innen Func
geändert wird, wie es i
nachdem sie "umgewandelte" auf einen r-Wert in den Parameter gebunden ist Referenz von std::move
.
Nun, mein Punkt:
bedeutet ein Objekt bewegt Eigentum an Ressourcen, von einem Objekt in ein anderes zu übertragen. Die integrierten Typen enthält jedoch keine Ressourcen, da sie selbst die Ressourcen sind. Es macht keinen Sinn, die Ressourcen, die sie besitzen, zu übertragen. Wie im Beispiel gezeigt, wird der Wert num
geändert. Seine Ressource, sein Selbst, ist derjenige, der modifiziert wird.
Haben eingebaute Typen Bewegungssemantik?
Auch eingebaute Objekte nach dem Verschieben (wenn es ist) ein wohldefiniertes Verhalten?
Nach was? >> * "Das Verschieben eines Objekts bedeutet die Übertragung des Eigentums an Ressourcen von einem Objekt in ein anderes. Dadurch könnte das ursprüngliche (Quell-) Objekt in einem undefinierten Zustand verbleiben, in dem die Zuweisung die einzige sichere und gültige Operation in diesem Objekt sein könnte. Alle Operationen, die den Inhalt dieser Objekte lesen, können unbestimmte Werte zurückgeben. "* – Nawaz
@Nawaz Laut dem, was ich in SO gelesen habe. –
'std :: move' bewegt sich nicht. Ihr Beispiel hat keine einzige Verschiebung zwischen den Ausgaben. –