|
|
1
679
A.
A.
第一个问题是,如果不查看大量分散的代码片段并了解所有规则,就几乎不可能判断C样式转换中会出现哪一个。
但是,让我们看一下几乎相同的代码:
正如您所看到的,如果不了解所有涉及的类,就很难区分这两种情况。 第二个问题是C样式转换太难定位。在复杂表达式中,很难看到C样式转换。几乎不可能编写一个自动化工具,它需要定位C风格的铸件(例如搜索工具),而不需要完全的C++编译器前端。另一方面,很容易搜索“static\u cast<”或“reinterpret\u cast<”。
这意味着,C型演员不仅更加危险,而且要找到所有演员以确保其正确性要困难得多。 |
|
|
2
121
一个实用的技巧:如果您计划整理项目,您可以在源代码中轻松搜索static_cast关键字。 |
|
|
3
93
|
|
|
4
29
这个问题比仅仅使用威瑟静态类型转换或C样式转换更大,因为使用C样式转换时会发生不同的事情。C++的铸造操作符旨在使这些操作更加明确。
在本例中(1)可能是可以的,因为A指向的对象实际上是B的实例。但是如果在代码中的那个点上您不知道A实际指向什么呢?(2) 也许完全合法(您只想查看整数的一个字节),但也可能是一个错误,在这种情况下,错误会很好,如(3)。CC++铸造操作符旨在通过在可能的时候提供编译时间或运行时错误来在代码中公开这些问题。 因此,对于严格的“值转换”,您可以使用静态转换。如果您想要运行时多态转换指针,请使用动态转换。如果您真的想忘记类型,可以使用reintrepret_cast。把康斯特扔出窗外就是康斯特·卡斯特。 它们只是使代码更加明确,这样看起来您知道自己在做什么。 |
|
|
5
26
|
|
|
6
8
|
|
|
7
7
当你写作时
当你写作时
编辑2014-02-26 我在5年多前写下了这个答案,但我弄错了。(见评论)但它仍然获得了更多的选票! |
|
|
8
6
reinterpret_cast允许整数到指针类型的转换,但如果使用不当,则可能不安全。 static_cast为数字类型提供了良好的转换,例如从as enum到int或int到float或任何您确信类型的数据类型。它不执行任何运行时检查。
还有一些其他的,但这些是你会遇到的主要问题。 |
|
|
9
4
除了操纵指向类的指针外,static_cast还可用于执行类中显式定义的转换,以及执行基本类型之间的标准转换:
|
|
AstralHex · 矩阵乘法代码工作不正常 1 年前 |
|
|
Fishie · 作为类成员的智能指针是否仍然自动释放?[关闭] 1 年前 |
|
|
Die4Toast · 递归调用成员箭头运算符-> 1 年前 |
|
|
Anka Hanım · 关于结构和动态数组地址的问题 1 年前 |