2016-12-13 12 views
2

による関数受け渡しに使用してREF私は2つの機能があります。のstd ::テンプレート関数と値

void fun(int k) { 
    ++k; 
} 

template<class T> 
void inc(T t) { 
    ++t; 
} 

をそして私はこれらのstd :: refを持つ関数を呼び出す:の値の後

をpは5、oの値は6です。これらの関数に対してstd :: refで関数を呼び出すとどういう違いがありますか?

+0

明らかではありませんか? – LogicStuff

答えて

10

std::refstd::reference_wrapperを返します。このタイプはimplicitly convertibleです。

fun(std::ref(p))を呼び出すと、新しく作成されたstd::reference_wrapperintに暗黙的に変換され、コピーが作成されます。

inc(std::ref(p))を呼び出すときは、の参照セマンティクスをそのまま使用して、std::reference_wrapperをコピーしています。

+0

私の答えよりも良い。よくやった。 – mascoj

+0

ありがとうございました。 –

関連する問題