为什么以及什么时候被转换为char而且需要?

sha*_*oth 11 c++ boost casting

boost :: detail :: addressof_impl :: f()中,一系列reinterpret_casts用于获取对象的实际地址,以防万一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)));
    }
}
Run Code Online (Sandbox Code Playgroud)

施法的目的是什么const volatile char&而不仅仅是施法char&

Mik*_*our 9

char&如果Tconst或者volatile限定符,reinterpret_cast则直接转换将失败- 无法删除这些(但可以添加它们),并且const_cast不能进行任意类型更改.