|
|
1
8
如果您知道指针最初是目标类型,那么使用reinterpret-cast是可以接受的。任何其他用途都利用了依赖于实现的行为,尽管在许多情况下这是必要和有用的,例如将指向结构的指针强制转换为指向字节的指针,以便将其序列化。 它被认为是危险的,因为它在编译时或运行时都不进行检查。如果你犯了一个错误,它会崩溃并严重烧坏,而且很难调试。您本质上是在告诉编译器“我比您更清楚这实际上是什么,所以只需编译代码,让我担心后果。” |
|
|
2
5
您在msdn上看到它的原因是因为win32 api是 C 但是人们坚持在 C++ . 当您编写与其他库接口的代码时,reinterpret cast很好。应该避免 在你自己的应用程序中 . |
|
|
3
3
这是一个用C++编写的Windows平台SDK,一个C API的例子。window过程只有wparam和lparam参数,如果需要通过window消息向结构传递指针,则必须强制转换。在我看来,这是一种完全可以接受的重新解释的用法。您不能避免强制转换,因为您正在编写的SDK(不是代码)不是为C++设计的,更不用说类型安全性,并且需要通过铸造来提供具有C绑定的泛型参数类型。 这是一个让您知道需要小心的标志,但无论如何都不能避免。 另一方面,如果您控制了代码的两边、API和使用者,那么最好让一个类型安全且不要求使用者执行强制转换来正确使用它的API。 |
|
|
4
2
不要忽视MSDN,但MSDN并不是进行正确C++编码的最佳场所。 使用reinterpret_cast的一个原因是当您从不透明数据类型转换到/转换时。重新解释代码并不是“危险的”,只是很容易出错并导致代码出现问题,所以应该避免这种情况。 C++风格转换的首选原因是StasyType是类型化的,并且所有的铸造时间更容易搜索。 程序员[错误地]经常使用强制转换来“取消编译器警告”,例如从无符号整数转换为有符号整数,或从32位整数转换为8位整数。 |
|
|
5
2
基本上
|
|
|
DutChen18 · 如何在C宏中内联触发隐式指针转换? 2 年前 |
|
|
0xDED · 如何将泛型类强制转换为对象的泛型类? 2 年前 |
|
|
Niclas · 变量>-1如何在C中精确求值? 2 年前 |
|
|
Textime · 将Varchar2转换为时间 2 年前 |
|
|
xpt · Go,无法将类型*int32转换为类型*int64 2 年前 |