boost :: detail :: addr_impl_ref的目的是什么?

时间:2010-02-25 11:43:21

标签: c++ templates boost casting

内部提升有boost::detail::addr_impl_ref结构,基本上有一个构造函数接受T&引用和一个重载operator T&()返回该引用。它用于实现boost::addressof()

template<class T> T* addressof( T& v )
{
    return boost::detail::addressof_impl<T>::f( boost::detail::addr_impl_ref<T>( v ), 0 );
}

boost::detail::addressof_impl<T>::f()接受T&作为第一个参数。 boost::addressof<T>()也有T& v作为参数。

为什么此处使用的boost::detail::addr_impl_ref()临时对象存储并返回T&而不是仅传递T& v

1 个答案:

答案 0 :(得分:2)

它阻止T的其他隐式转换运算符成为转换的一部分。

编辑:例如:

struct foo
{
   operator foo*()
   {
      return 0;
   }
};