は検討thisコード:組み込み型には移動セマンティクスがありますか?
#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
内部に変更され、r値に "変換" された後i
をパラメータにバインドされますstd::move
による参照。
まあ、私のポイント:
オブジェクトを移動すると、他に一つのオブジェクトからの資源の所有権を移すことを意味します。ただし、組み込みタイプは、それ自体がリソースであるため、リソースを保持しません。保持しているリソースを転送するのは意味がありません。この例に示すように、num
の値が変更されます。そのリソース、すなわち自己は、変更されているリソースです。
組み込み型には移動セマンティクスがありますか?
また、ビルトインされた型オブジェクトは、定義された振る舞いをした後に移動されますか?
何に応じてですか?オブジェクトを移動すると、あるオブジェクトから別のオブジェクトへのリソースの所有権が移譲されるため、元の(ソース)オブジェクトは定義されていない状態になり、そのオブジェクトで使用できる唯一の安全で有効な操作です。それらのオブジェクトの内容を読み取る操作は、未定義の値を返す可能性があります。」* – Nawaz
@ Nawaz私がSOで読んだことによると。 –
'std :: move'は動かない。あなたの例では、出力間の移動は1つしかありません。 –