このコードを考えてみましょう:
#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
明らかに、によってr値参照に「変換」された後、パラメータにバインドされるため、i
内部で変更されています。Func
i
std::move
さて、私のポイント:
オブジェクトの移動とは、あるオブジェクトから別のオブジェクトにリソースの所有権を譲渡することを意味します。ただし、組み込み型はそれ自体がリソースであるため、リソースを保持しません。彼らが保持しているリソースを転送することは意味がありません。例に示すように、num
の値が変更されます。そのリソース、その自己は、変更されているものです。
組み込み型には移動セマンティクスがありますか?
また、組み込み型オブジェクトは、移動後(存在する場合)、明確に定義された動作をしますか?