8

查看托管在GitHub 上的 Sascha Willem 的 C++ Vulkan 演示,我注意到一些函数返回了 Datatype VkBool32

当我注意到 Line 时,我很好奇为什么 Khronos 没有使用普通的 bool

typedef uint32_t VkBool32;

在 vulkan.h. uint32_t 定义为

typedef unsigned int uint32_t;

在 stdint.h 中。

我的问题是,如果标准 Bool 只需一个字节就可以完成工作,为什么丢弃 3 个字节有意义?我的小 Recherche 表明几乎没有性能差异(请参阅哪个更快:if (bool) 或 if(int)?),并且 Khronos 自己说他们希望最大限度地减少兼容性问题(在这种情况下,旧 C 没有原始布尔类型)以专注于现代代码。

(请参阅从此处获取的 Trevett 的引述)

彻底的重新设计,我们不向后兼容

4

1 回答 1

12

尝试sizeof(bool)在您的系统上打印。常见的答案是 4 或 1,其值绝不是普遍的。根据您使用的编译器标志,您可以获得不同的答案。

Vulkan 需要在所有系统上以相同的方式工作,并且无论您使用什么编译器标志来编译程序,它都需要正常工作。如果 Vulkan 是用 编译的,sizeof(bool) == 1而你用 编译sizeof(bool) == 4,接口会不正确。我亲眼目睹了这种特殊错误的发生。

于 2016-02-18T17:25:53.987 回答