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 回答