【问题标题】:const and static cast togetherconst 和 static 一起强制转换
【发布时间】: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 正确性。

标签: c++ casting


【解决方案1】:

如果您确定传递的指针指向child 类型的对象或其子对象,请使用

static_cast<child const*>(pParent)

请注意,如果不满足上述条件,这会导致未定义的行为(!),因此如果存在指针不指向 child 类型的对象的可能性,并且 parent 是多态的,请使用 @ 987654325@ 使用相同的语法。如果强制转换无效,它将返回一个空指针,通过 RTTI 确定后者。

【讨论】:

    猜你喜欢
    • 2012-12-26
    • 1970-01-01
    • 2011-01-20
    • 2013-09-27
    • 1970-01-01
    • 1970-01-01
    • 2013-10-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多