c++ - 这是什么 reinterpret_cast 约定?它比 static_cast 好吗?

标签 c++ casting coding-style conventions reinterpret-cast

<分区>

我正在查看一些提供 c api 的 c++ 包装器代码,我发现很多 reinterpret_cast 其中 static_cast 就足够了,例如:

struct cpp_object{ void foo(){ /* do something */ } };

/* begin: c api */
typedef void c_object;

void foo(c_object *o)
{
    // why this:
    reinterpret_cast<cpp_object *>(o)->foo();
    // instead of just:
    static_cast<cpp_object *>(o)->foo();
}
/* end: c api */

通常我在极少数情况下使用 reinterpret_cast,主要与将缓冲区内容强制位转换为已知布局和大小的类型有关,已知位于缓冲区内容中。

所以我问这种做法是否有意义,或者坚持 static_cast 会更好。

最佳答案

在这种情况下,reinterpret_cast 相当于 static_castcv void*,然后是另一个 static_cast目标指针类型。我相信这是对 C++11 的补充,并且在 C++03 中不存在,您必须在 C++03 中编写两个 static_cast 以获得可移植的行为。

关于c++ - 这是什么 reinterpret_cast 约定?它比 static_cast 好吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19232915/

相关文章:

c# - 在 C# 中将 mysql 读取器结果转换为字符串会引发异常

.net - 为什么尝试 block 很昂贵?

c++ - 在编译时生成 BitCount LUT

c++ - 使用 chrono 的精确时间 sleep

c++ - dynamic_cast 不保证一个有效的、完整的对象?

C 编程输出与逻辑不匹配(可能是类型转换)

Python 绘图 : How can I make matplotlib. pyplot 停止强制我的标记样式?

c++ - 是否有一种编码风格在调用中明确提及参数名称?

c++ - 本地主机上的 TServerSocket 生成异常

c++ - 看不见的地形