【发布时间】:2015-01-17 07:40:33
【问题描述】:
我有一个作为父类类型的 const 指针传递的子类类型对象的引用。 我需要将此指针转换为非常量子类。
还有什么比static_cast<child*>(const_cast<parent*>(pParent))更好的吗?
【问题讨论】:
-
可以将
static_cast替换为dynamic_cast,以防您想获得有关投射成功的RTTI 信息。 -
你有 const 指针,还是指向 const 的指针?
-
dynamic_cast会更好,如果parent是多态的。更好的是使用不那么疯狂的设计。const_cast是一种腐臭的代码气味。 -
换句话说,没有简单的方法可以一步完成向下常量转换。你们都只讨论 RTTI 检查。是的,它是一个 const 指针。
-
@V-X:从技术上讲,你可以通过邪恶的 C 风格演员一步完成。但是不要。这种怪物至少清楚地表明正在发生一些可怕的事情。
dynamic_cast,如果可能的话,会稍微好一点(在更安全的意义上),因为它至少会强制类型正确性,而不是 const 正确性。