为什么以及什么时候被转换为char volatile&需要?

时间:2010-02-25 12:36:59

标签: c++ boost casting

boost::detail::addressof_impl::f()中完成了一系列reinterpret_cast以获取对象的实际地址,以防class T超载operator&()

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&的目的是什么?

2 个答案:

答案 0 :(得分:9)

如果char&Tconst限定符,volatile无法移除这些(但可以添加),则直接转换为reinterpret_cast会失败,const_cast无法进行任意类型更改。

答案 1 :(得分:4)

对象可能是constvolatile,或者两者兼而有之(这可能是矛盾的),在这种情况下reinterpret_cast对于缺少这些对象的类型可能是非法的属性。 (走向相反的方向当然不是问题)。