C++ でパラメーターを使用して、値/オブジェクトを保存したいと思います。この例では、単純化した例としてグローバル変数から値を格納しようとしています。
このコードは機能しません。
int value = 20;
void returnPointer2(int* hello)
{
hello = &value;
}
// It changes nothing
int value2 = 100;
returnPointer2(&value2);
cout << value2 << endl;
ダブルポインターが必要だったので。
void returnPointer3(int** hello)
{
*hello = &value;
}
int* vp2 = new int();
*vp2 = -30;
returnPointer3(&vp2);
cout << *vp2 << endl; // expects 20
参照を思い出しました。ポインター参照を使用して同じ結果を得ることができます。
void returnPointer4(int* & hello)
{
cout << "value : " << value;
hello = &value;
}
int* vp3 = new int();
*vp3 = -130;
returnPointer4(vp3); // also expects 20, but much simpler to use
cout << "better : " << *vp3 << endl;
ダブル&で試してみたところ、コンパイルされました。
void returnPointer5(int&& hello)
{
cout << "value : " << value;
hello = value;
}
ただし、整数変数の入力ではコンパイルされません。
int vp4 = 123;
returnPointer5(vp4); // also expects 20, but even more simpler to use
cout << "best : " << vp4 << endl;
これはエラー メッセージです。
pointer_return.cpp:31:6: error: initializing argument 1 of 'void returnPointer5(int&&)'
void returnPointer5(int&& hello)
たまたま について知っていたmove
のですが、このコードで動作します。
int vp4 = 123;
returnPointer5(move(vp4)); // also expects 20, but much simpler to see
cout << "best : " << vp4 << endl;
move
この関数の背後にある魔法/ロジックは何ですか?