为什么这个C风格的转换不考虑static_cast后跟const_cast?

考虑:

float const& f = 5.9e-44f;
int const i = (int&) f;

根据expr.cast/4这应该被视为,为了:

  • const_­cast
  • static_­cast
  • astatic_­cast后跟 a const_­cast,
  • reinterpret_­cast,或
  • areinterpret_­cast后跟 a const_­cast,

显然 astatic_­cast<int const&>后跟 aconst_­cast<int&>是可行的,并且将导致int值为0 的 a。但是所有编译器都初始化i42,表明它们采用了最后一个选项reinterpret_­cast<int const&>后跟const_­cast<int&>。为什么?

相关:在 C++ 中,C 风格的强制转换可以调用转换函数然后抛弃常量吗?,为什么 (int&)0 格式错误?, C++ 规范是否说明了如何在 static_cast/const_cast 链中选择类型以用于 C 样式强制转换?,用 (float&)int 输入双关语有效,(float const&)int 转换为 (float)int 吗?

以上是为什么这个C风格的转换不考虑static_cast后跟const_cast?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>