【发布时间】:2015-12-25 00:17:34
【问题描述】:
据我所知,bool 类型的宽度是实现定义的。但是是否有任何固定宽度的布尔类型,或者我应该坚持使用,例如 uint8_t 来表示固定宽度的布尔值?
[编辑] 我制作了这个 python 脚本,它自动生成一个 C++ 类,它可以保存我希望能够在微控制器和我的计算机之间发送的变量。它的工作方式是它还保留两个数组,其中包含一个指向每个变量的指针以及每个变量的大小。这为我提供了轻松序列化和反序列化这些变量中的每一个的必要信息。但是,为了使其工作,变量类型的 sizeof、endianness 等必须在两边都相同,因为我在两边都使用相同的生成代码。 我不知道这是否会是一个问题,但我不希望它是。我之前已经使用过这个(32 位 ARM)芯片,过去发送整数和浮点类型没有问题。然而,几天后我才能回来并可以在芯片上尝试布尔值。以后这可能是一个更大的问题,因为此代码以后可能会在其他芯片上重复使用。
所以我的问题是。标准库中是否定义了固定宽度的 bool 类型,还是应该只使用 uint8_t 来表示布尔值?
【问题讨论】:
-
bool类型固定为true和false。 2 个州怎么会有不同的宽度? -
你是指内存中的大小吗?如果是这样,则布尔值取决于编译器。在 99.9% 中,它占用 1 位,因为它代表真或假,开或关。不过其他7个都塞满了,不能用了。这回答你了吗?
-
@Emz:通常
bool是 8 位,除了低位之外的所有位都设置为 0。 -
如果您能解释为什么您需要某种特定宽度的布尔类型,那将会有所帮助。
bool尚未服务的这种类型有什么用途? (“具有固定宽度”不是答案。) -
C 和 C++ 中任何类型的大小在不同架构之间不一定相同
标签: c++ boolean fixed-width