【问题标题】:C++ like vs C like casts? [duplicate]C ++之类的与C之类的演员表? [复制]
【发布时间】:2012-08-03 05:37:35
【问题描述】:

可能重复:
Regular cast vs. static_cast vs. dynamic_cast

自从我开始编程以来,我一直在使用类似 C 的强制转换:

class* initializedClassInstance;
void* test = (void*) initializedClassInstance;

有人告诉我,我应该习惯 C++ 强制转换(static_cast、dynamic_cast...)。

是否有理由偏爱其中一种(C++ 而非 C 风格)? 静态演员表和动态演员表是有区别的,对吧?但它是什么?

谢谢!

【问题讨论】:

    标签: c++ c casting


    【解决方案1】:

    C 风格的强制转换是不安全的。

    C++ 风格的强制转换以另一种方式表现。 static_cast 如果无法进行强制转换,会给你一个编译错误。 dynamic_cast 如果你正在转换指针,失败时将转换为 NULL,否则抛出异常。

    所以这可以让您编写更安全的代码。

    【讨论】:

    • dynamic_cast 只会为指针返回 NULL。对于引用,将引发异常
    • @Andrew,是的,这很好,谢谢。
    • @KillianDS,这就是我的意思。一个很好的例子是指针转换,它允许你转换几乎任何东西。
    • 太好了,感谢您的快速答复!
    • @SingerOfTheFall:我的评论更多是关于缺乏解释为什么 C 风格的转换是不安全的。如果没有适当的解释,这是(imo)一个糟糕的答案。
    【解决方案2】:

    是的,有。它给你支票。例如,static_cast 提供编译时检查,dynamic_cast 提供运行时检查。

    你可以阅读更多关于castshere的信息

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-03-25
      • 2012-07-08
      • 2021-05-13
      • 2023-03-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多