このコードを考えてみましょう:実行するとこのstd :: refの動作は論理的ですか?
#include <iostream>
#include <functional>
int xx = 7;
template<class T>
void f1(T arg)
{
arg += xx;
}
template<class T>
void f2(T arg)
{
arg = xx;
}
int main()
{
int j;
j=100;
f1(std::ref(j));
std::cout << j << std::endl;
j=100;
f2(std::ref(j));
std::cout << j << std::endl;
}
、このコードの出力
107
100
私は2番目の値が7ではなく100
私は何をしないのですなると予想しているのでしょうか?これは今、何を期待し
template<class T>
void f2(T arg)
{
arg.get() = xx;
}
:f2
へ
参照ラッパーは再シール可能であるため、参照先のオブジェクトではなく、参照先のオブジェクトに変更が加えられます。 –
優秀な質問! – vsoftco