2

最近、std::reference_wrapperクラスを使い始めました。get()プリミティブ参照の特定の使用法を置き換えるときに、関数を使用して、通常の参照を取る関数にパラメーターとして reference_wrappers を渡す必要がないことに気付きました。

void foo(const T& a);
//...
T obj;
std::reference_wrapper<const T> ref(obj);
foo(ref);  //works!
//foo(ref.get()); also works, but I expected that it would be required

std::reference_wrapper関数に渡されたときに、どのようにプリミティブ参照に暗黙的に変換されますか?

4

2 に答える 2

6

reference_wrapper には以下が含まれます (§20.8.3):

// access
operator T& () const noexcept;

これは変換演算子であり、 として指定されていないため、 からへexplicitの暗黙的な変換が可能です。reference_wrapper<T>T&

于 2012-11-01T04:52:11.090 に答える
5

この変換演算子をオーバーロードします。

operator T& () const;

http://en.cppreference.com/w/cpp/utility/functional/reference_wrapper/get

于 2012-11-01T04:51:35.393 に答える