在boost::detail::addressof_impl::f()中,如果class T重载了operator&(),则会执行一系列reinterpret_cast来获取对象的实际地址
template<class T> struct addressof_impl
{
static inline T* f( T& v, long )
{
return reinterpret_cast<T*>(
&const_cast<char&>(reinterpret_cast<const volatile char&>(v)));
}
}转换为const volatile char&而不是仅转换为char&的目的是什么
发布于 2010-02-25 20:57:47
如果T有const或volatile限定符,那么直接转换到volatile将失败- reinterpret_cast不能删除这些限定符(但可以添加它们),并且const_cast不能进行任意的类型更改。
发布于 2010-02-25 20:56:54
对象可以是const或volatile,或者两者兼而有之(尽管这可能是矛盾的),在这种情况下,将其reinterpret_cast到缺少这些属性的类型可能是非法的。(当然,反其道而行之永远不是问题)。
https://stackoverflow.com/questions/2333960
复制相似问题