内部提升有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
?
答案 0 :(得分:2)
它阻止T
的其他隐式转换运算符成为转换的一部分。
编辑:例如:
struct foo
{
operator foo*()
{
return 0;
}
};