首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么以及何时被强制转换为char volatile& volatile?

为什么以及何时被强制转换为char volatile& volatile?
EN

Stack Overflow用户
提问于 2010-02-25 20:36:59
回答 2查看 585关注 0票数 11

boost::detail::addressof_impl::f()中,如果class T重载了operator&(),则会执行一系列reinterpret_cast来获取对象的实际地址

代码语言:javascript
复制
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&的目的是什么

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-02-25 20:57:47

如果Tconstvolatile限定符,那么直接转换到volatile将失败- reinterpret_cast不能删除这些限定符(但可以添加它们),并且const_cast不能进行任意的类型更改。

票数 10
EN

Stack Overflow用户

发布于 2010-02-25 20:56:54

对象可以是constvolatile,或者两者兼而有之(尽管这可能是矛盾的),在这种情况下,将其reinterpret_cast到缺少这些属性的类型可能是非法的。(当然,反其道而行之永远不是问题)。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2333960

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档