1

私はそれに関するドキュメントを読みましたが、誰かがそれをもう少しわかりやすい英語で説明できれば幸いです。

4

1 に答える 1

5

プレーンな C++ 参照&は、初期化はできますが再割り当てはできないため、奇妙な市民です。例えば:

int a, &ra = a;
int b, &rb = b;
ra = rb; // actually does a = b

プレーンなポインターは行儀の良い市民ですが、初期化と再割り当ての両方が可能です。

したがって、プレーン ポインターのラッパーである which をref()作成します。reference_wrapperこのラッパーは参照で初期化でき、プレーン参照への自動変換があります&。例:

int a;
auto ra = std::ref(a); 
int b;
auto rb = std::ref(b);
ra = rb; // now ra contains a pointer to b
int& rb2 = ra; // automatically converts to reference

これは主に、ラムダまたは式を使用した関数型プログラミングに役立ちstd::bindます。std::bindバインドされた引数をコピーするため、関数の引数を参照にバインドしたい場合にreference_wrapper便利です。例えば:

void foo(int);

int i = 1;
auto f = std::bind(foo, i); // makes a copy of i
i = 2;
f(); // calls foo(1)

auto g = std::bind(foo, std::ref(i));
i = 3;
g(); // calls foo(3);
于 2013-04-09T16:50:40.310 に答える