C++ 在C+中将整数强制转换为GLvoid*是否有效+;20使用钻头铸造?

C++ 在C+中将整数强制转换为GLvoid*是否有效+;20使用钻头铸造?,c++,opengl,casting,c++20,C++,Opengl,Casting,C++20,A询问了如何在C++11中的整数类型和GLvoid*之间转换(基于该问题的标记),但这里我对C++20感兴趣 现在有了std::bit_cast作为进行类型转换的选项,我想知道在OpenGL函数中使用整数是否“正确”,因为历史原因,使用GLvoid*表示字节偏移量(例如),或者是否应该使用上一个问题中引用的方法。否,尽管(使用适当大小的整数)它在实践中通常会起作用,但无论如何,这些方法都不严格符合要求。这是一个C API,所以它的意思是(void*)偏移量(在C中)。如果您的工具链具有预期的C兼

A询问了如何在C++11中的整数类型和
GLvoid*
之间转换(基于该问题的标记),但这里我对C++20感兴趣


现在有了
std::bit_cast
作为进行类型转换的选项,我想知道在OpenGL函数中使用整数是否“正确”,因为历史原因,使用
GLvoid*
表示字节偏移量(例如),或者是否应该使用上一个问题中引用的方法。

否,尽管(使用适当大小的整数)它在实践中通常会起作用,但无论如何,这些方法都不严格符合要求。这是一个C API,所以它的意思是
(void*)偏移量
(在C中)。如果您的工具链具有预期的C兼容性,您可以在C++中编写它,在这种情况下,它等同于代码> RealTytCaseCask(偏移),但不一定要<代码> BITYCAST(偏移)(即使代码< ReCurtTyStase)不保留位模式,并且另外需要“代码> sisiOffOffs= = siZeof。(void*)

比特转换在这里肯定是错误的。
void*
不要求与大多数整数类型的大小相同。
bit\u转换要求源类型和目标类型具有完全相同的大小。因此,在32位系统上,
std::bit\u转换(24ull)
是一个编译错误。在64位系统上,简单的
std::bit_cast(24)
是一个编译错误

甚至不要求
uintptr\u t
的大小与指针的大小相同,只是它至少有与指针相同的位。如果它有更多的位,那么
bit\u cast
将阻塞它

如果您不想使用C风格的强制转换,只需重新解释强制转换即可