参考 SO C++ FAQ什么时候应该使用 static_cast、dynamic_cast 和 reinterpret_cast?.
const_cast 用于将 const 删除或添加到变量中,它是删除 const 的唯一可靠、已定义且合法的方法。reinterpret_cast 用于更改类型的解释。
我以合理的方式理解为什么 const 变量应该仅使用 const_cast 强制转换为非 const,但我无法找出使用 reinterpret_cast 而不是 const_cast 来添加 const 的合理理由。
我知道使用 reinterpret_cast 甚至添加 constness 是不理智的,但是使用 reinterpret_cast 添加 constness 会是 UB 还是潜在的定时炸弹?
我在这里感到困惑的原因是因为声明
很大程度上,您使用 reinterpret_cast 获得的唯一保证是,如果您将结果转换回原始类型,您将获得完全相同的值。
因此,如果我使用 reinterpret_cast 添加 constness 并且如果您将结果 reinterpret_cast 重新转换为原始类型,它应该返回原始类型并且不应该是 UB,但这违反了一个事实,即应该只使用 const_cast 来删除 constness
在单独的说明中,该标准保证您可以使用重新解释案例添加 Constness
5.2.10 Reinterpret cast (7) ......当“pointer to T1”类型的prvalue v转换为“pointer to cv T2”类型时,如果两个T1都为static_cast(static_cast(v))和 T2 是标准布局类型(3.9),T2 的对齐要求不比 T1 严格......