c++ - 在 C++20 中使用 bit_cast 将整数转换为 GLvoid* 是否有效?
问题描述
上一个问题询问了如何在整数类型和GLvoid*
C++11 之间进行转换(基于该问题的标签),但这里我对 C++20 感兴趣。
现在有std::bit_cast
一个选项可以进行类型转换,我想知道将整数与 OpenGL 函数一起使用是否是“正确”的方式,由于历史原因需要 aGLvoid*
来表示字节偏移量(例如glDrawRangeElements),或者是否应使用上一个问题中引用的方法。
解决方案
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 风格的演员表,只需做一个。
推荐阅读
- python - 在 Python (PyQt5) 中使用子类处理 keyPressEvent
- php - PHP:将动态上传的图像转换为特定颜色(动态颜色)
- facebook - Facebook 获取开发者帐户电子邮件?
- javascript - Promise 说他们完成了,但实际上没有完成?
- csv - 导入 csv 在 Jupyter 笔记本中的初始位置 Julia 返回编码标识符
- java - Java Android - 访问 addValueEventListener 之外的变量
- r - 为 Rmarkdown 格式化为 kable / kableExtra 的表格的一个单元格添加上标
- php - 如何使用命令行预编译 php opcache?
- kubernetes - 使用 EnvoyProxy 添加本地速率限制
- loops - VHDL 中等待、无限循环、while 循环和 for 循环语句的综合