std :: refの仕組みを理解しようとしています。上記のコードでreference_wrapperとstd :: refはどのように機能しますか?
#include <functional>
#include <iostream>
template <class C>
void func(C c){
c += 1;
}
int main(){
int x{3};
std::cout << x << std::endl;
func(x);
std::cout << x << std::endl;
func(std::ref(x));
std::cout << x << std::endl;
}
Output : 3 3 4
、私は第三の関数呼び出しのためのテンプレートパラメータC
がstd::reference_wrapper<int>
としてインスタンス化されると思います。 the referenceを読んでいるうちに が見つかりました+=
の演算子がstd::reference_wrapper<int>
に見つかりませんでした。 次に、c += 1;
はどのように有効ですか?
次に、cはまだreference_wrapperです。 –
Sungmin
@Sungmin:実際、 'c'自体は型を変更できません。 '+ ='は 'c.operator int&()'の結果に適用され、 'reference_wrapper'のターゲットへの参照になります。 –
ありがとう、私は理解しています。 – Sungmin