C ++ std :: reference_wrapper如何隐式转换为引用?

时间:2012-11-01 04:49:57

标签: c++ reference c++11 implicit-conversion reference-wrapper

我最近开始使用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在传递给函数时如何隐式转换为基本引用?

2 个答案:

答案 0 :(得分:6)

reference_wrapper包括(§20.8.3):

// access
operator T& () const noexcept;

这是转换运算符,由于未将其指定为explicit,因此它允许从reference_wrapper<T>隐式转换为T&

答案 1 :(得分:5)

它会重载此转换运算符:

operator T& () const;

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