reference_wrapper和隐式转换

时间:2013-05-06 09:38:44

标签: c++ c++11

考虑以下代码:

int v = 12;
std::reference_wrapper<int> x(v);
std::reference_wrapper<const int> y(x);  // (1) This works
std::reference_wrapper<const int> z = x; // (2) This fails

如果我理解正确,(1)有效,因为它只需要一次用户转换,(2)失败,因为它涉及转换序列中的两次用户转换:

std::reference_wrapper<int>::operator int& and
std::reference_wrapper<const int>::(const int&)

因此,std::reference_wrapper<int>不是隐式可转换std::reference_wrapper<const int>,这会破坏我使用std::is_convertible特征的部分代码。

这个设计是否有任何理由涉及不存在通用复制构造函数:

template <typename Y>
reference_wrapper<T>::reference_wrapper(const reference_wrapper<Y>&)

(就像在std::shared_ptr中那样)会允许这种隐式转换吗?

1 个答案:

答案 0 :(得分:0)

std::reference_wrapper与其基础类型之间没有隐式自动转换(因为它可能不安全且令人困惑)。

正确的语法应该是:

std::reference_wrapper<const int> z = x.get();