常见的C ++实现如何处理static_cast和reinterpret_cast

时间:2016-01-10 17:16:56

标签: c++ casting

好的大多数答案都说,reinterpret_cast是最危险的演员,可以做任何事......不是......,它可以像其他类型一样重新解释一种类型的比特。所以我的问题是为什么static_cast<char>(int(0))有效但reinterpret_cast<char>(int(0))没有? 是由于参数类型和目标值类型的大小差异?

reinterpret_cast<char*>(&Some_double_var)有效。

实现如何知道哪些转换在哪些情况下有效?

由于

1 个答案:

答案 0 :(得分:1)

reinterpret_cast是最危险的演员,但它无能为力。它可以做最危险的事情。 reinterpret_cast可以执行特定的事项列表。从一个标量值转换到另一个标量值不在该列表中,因为static_cast旨在用于该标量值。 reinterpret_cast的列表基本上是:

  • 没有抛弃constness
  • 将指针转换为积分。
  • 将积分转换为指针。
  • 在函数指针类型之间进行转换。
  • 在对象指针类型之间进行转换。
  • 在引用类型之间进行转换。
  • 在指针到成员类型之间进行转换。

每种类型的演员都是为了做某件事。例如,reinterpret_cast不会做与const_cast相同的事情。