在 C++ 中,static_cast 比 dynamic_cast 更受欢迎吗?

Blu*_*une 0 c++ casting

我正在考虑关于我们内部 C++ 代码风格指南的公司内部注释的潜力。这是笔记的初稿:

“不想static_castdynamic_castdynamic_cast仅当动态(=运行时)类层次结构导航不可避免时才使用。“

我对这篇笔记的想法是:static_cast应该使用编译时检查的优势。在我看来,将潜在错误从运行时重新定位到编译时是个好主意。笔记的第二句是从这里复制和修改的:

CppCoreGuidelines

我关于 C++ 编码风格的说明是否正确?

eer*_*ika 5

在 C++ 中,static_cast 比 dynamic_cast 更受欢迎吗?

当然。如果静态转换是一个选项,那么它比动态转换更好。换句话说,只有在不能选择静态转换时才应使用动态转换。不过不要太过分了。实现自己的并行 RTTI 只是为了避免动态转换会被误导。

此外,当静态转换不是一种选择时,我建议至少考虑其他设计选择,例如引入虚函数而不是使用动态转换。

在我看来,将潜在错误从运行时重新定位到编译时是个好主意。

我想不出一个运行时错误会通过将动态强制转换为静态强制转换而重新定位到编译时。在一般情况下,静态转换是比动态转换安全。它是首选,因为它具有较少的运行时开销。