为什么 Vulkan 的 VkBool32 被实现为无符号的 int?
Why is Vulkan's VkBool32 implemented as an unsigned int?
浏览 Sascha Willem 在 GitHub 上托管的 C++ Vulkan 演示,我注意到一些函数返回了数据类型VkBool32
。
我很好奇为什么 Khronos 在我注意到线时不使用正常的布尔值
typedef uint32_t VkBool32;
在伏尔坎·uint32_t定义为
typedef unsigned int uint32_t;
在标准中。
我的问题是,如果标准布尔值只用一个字节就可以完成这项工作,为什么扔掉 3 个字节是有意义的?我的小研究表明几乎没有性能差异(参见哪个更快:if(bool)或if(int)?),Khronos 他们自己说他们希望最小化兼容性问题(在这种情况下,旧的C没有原始布尔类型),以便专注于现代代码。
(见特雷维特的引文摘自这里)
从头开始重新设计,我们不向后兼容
尝试在系统上打印sizeof(bool)
。 常见的答案是 4 或 1,其值绝不是通用的。 您可以根据所使用的编译器标志获得不同的答案。
Vulkan 需要在所有系统上以相同的方式工作,无论您使用什么编译器标志来编译程序,它都需要正常工作。 如果 Vulkan 是用sizeof(bool) == 1
编译的,但你用sizeof(bool) == 4
编译,接口将不正确。 我亲眼目睹了这个特殊错误的发生。
相关文章:
- 是什么导致了这种使用三进制而不是短整型的有符号int到无符号int转换
- C++:使用没有位移位的指针将无符号字符转换为无符号 int
- 是否可以将无符号 int 的最大值转换为 int 并将结果转换为 -1?
- 为什么QByteArray的大小是"int"而不是"无符号int"
- 无符号长整型和无符号 int 之间有什么区别,这 2 种类型应该如何在 c# 中封送?
- 使用无符号int作为二进制来在c++中实现一个集
- C++如何将变量传递给带有无符号 int & 的参数uint16_t函数?
- 为什么我不能使用在 Visual C++ 32 位中实现运算符无符号 int() 作为数组索引的类?
- 视觉C++转换和写入值为 10 的无符号 int 给出 5 个字节
- uint8_t在转换为无符号 int 时未打印正确的值
- G++ 错误:重载的"abs(无符号 int)"的调用不明确
- 将 3D 矢量浮点打包到无符号 int 中并将其解压缩
- 如何使用 JNI 将 double 和无符号 int 从本机 c 库返回到 java
- 为什么printf和cout为此无符号int提供了不同的输出
- memcpy 从无符号字符 * 到无符号 int
- C++ 重载与有符号和无符号 int 不同
- 创建具有未定义溢出的无符号 int
- 将大双精度转换为无符号 int 期间堆栈损坏
- 错误:成员引用基类型"uint32_t"(也称为"无符号 INT")不是结构或联合
- 无符号int的比较始终是正确的(NPOS问题?)