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