参考SO C++ FAQ When should static_cast, dynamic_cast and reinterpret_cast be used?。const_cast vs reinterpret_cast
const_cast用于删除或添加const到一个变量及其唯一可靠,定义和合法的方式来消除常量。 reinterpret_cast用于更改类型的解释。
我理解一个合理的方式,为什么一个const变量应该只是使用const_cast转换为非const,但我无法找出使用reinterpret_cast而不是const_cast添加const的问题的合理理由。
我明白,使用reinterpret_cast甚至添加常量不是理智的,但它会是一个UB或潜在的使用reinterpret_cast添加常量的定时炸弹?
我在这里感到困惑的原因是因为语句的
很大程度上,你的reinterpret_cast唯一能把握的是,如果 你把结果返回到原来的类型,你会得到确切 相同的价值。
所以,如果我添加使用reinterpret_cast的,如果你的reinterpret_cast结果回到原来的类型,它应该产生回原来的类型,不应该UB,但违反了一个事实,就是只能用const_cast常量性去除常量性
在一个单独的说明,标准保证了您可以使用重新解释的情况下
5.2.10重释投(7)......当类型的prvalue v常量性增加“指向T1的指针”被转换为类型“指向cv T2的指针”,结果是 的static_cast(的static_cast(V))如果两个T1和T2是 标准布局类型(3.9)和T2的对准要求是 并不比T1的严格........
@clossvoters:你可以请参考我的重复问题,回答这个问题吗? – Abhijit
'const_cast'也涵盖'volatile'的添加/删除。 –
@MikeDeSimone:是的,但我当前的重点只是稳定 – Abhijit