首页 > 解决方案 > 在 C++20 中使用 bit_cast 将整数转换为 GLvoid* 是否有效?

问题描述

上一个问题询问了如何在整数类型和GLvoid*C++11 之间进行转换(基于该问题的标签),但这里我对 C++20 感兴趣。

现在有std::bit_cast一个选项可以进行类型转换,我想知道将整数与 OpenGL 函数一起使用是否是“正确”的方式,由于历史原因需要 aGLvoid*来表示字节偏移量(例如glDrawRangeElements),或者是否应使用上一个问题中引用的方法。

标签: c++openglcastingc++20

解决方案


bit_cast绝对是这里的错误。void*不需要与大多数整数类型的大小相同。bit_cast 要求源类型和目标类型具有完全相同的大小。因此,在 32 位系统上,astd::bit_cast<void*>(24ull)是编译错误。在 64 位系统上,一个简单的问题std::bit_cast<void*>(24)是编译错误。

甚至uintptr_t不需要与指针具有相同的大小;只是它的位数至少与指针一样多。如果它有更多,那么bit_cast将窒息它。

reinterpret_cast<void*>如果您不想使用 C 风格的演员表,只需做一个。


推荐阅读