【问题标题】:Is there a fixed-width bool type in standard C++?标准 C++ 中是否有固定宽度的 bool 类型?
【发布时间】:2015-12-25 00:17:34
【问题描述】:

据我所知,bool 类型的宽度是实现定义的。但是是否有任何固定宽度的布尔类型,或者我应该坚持使用,例如 uint8_t 来表示固定宽度的布尔值?

[编辑] 我制作了这个 python 脚本,它自动生成一个 C++ 类,它可以保存我希望能够在微控制器和我的计算机之间发送的变量。它的工作方式是它还保留两个数组,其中包含一个指向每个变量的指针以及每个变量的大小。这为我提供了轻松序列化和反序列化这些变量中的每一个的必要信息。但是,为了使其工作,变量类型的 sizeof、endianness 等必须在两边都相同,因为我在两边都使用相同的生成代码。 我不知道这是否会是一个问题,但我不希望它是。我之前已经使用过这个(32 位 ARM)芯片,过去发送整数和浮点类型没有问题。然而,几天后我才能回来并可以在芯片上尝试布尔值。以后这可能是一个更大的问题,因为此代码以后可能会在其他芯片上重复使用。

所以我的问题是。标准库中是否定义了固定宽度的 bool 类型,还是应该只使用 uint8_t 来表示布尔值?

【问题讨论】:

  • bool 类型固定为truefalse。 2 个州怎么会有不同的宽度?
  • 你是指内存中的大小吗?如果是这样,则布尔值取决于编译器。在 99.9% 中,它占用 1 位,因为它代表真或假,开或关。不过其他7个都塞满了,不能用了。这回答你了吗?
  • @Emz:通常bool 是 8 位,除了低位之外的所有位都设置为 0。
  • 如果您能解释为什么您需要某种特定宽度的布尔类型,那将会有所帮助。 bool 尚未服务的这种类型有什么用途? (“具有固定宽度”不是答案。)
  • C 和 C++ 中任何类型的大小在不同架构之间不一定相同

标签: c++ boolean fixed-width


【解决方案1】:

没有。如果您需要确定大小,只需使用uint8_t。在 C 相关语言中,任何整数类型都可以很容易地被视为布尔值。请参阅https://stackoverflow.com/a/4897859/1105015,详细讨论标准如何不保证bool 的大小为任何特定值。

【讨论】:

  • 当然,在执行此操作时不会隐式转换为bool,因此您必须小心。例如uint8_t x = 0x500 & 0x100; 将是0,但布尔值将是true
  • @M.M 是的,但很容易解决:uint8_t x = 0x500 & 0x100 != 0。你只需要小心。
  • @MarkRansom ITYM (0x500 & 0x100) != 0 ;)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-21
  • 1970-01-01
  • 2021-07-01
  • 1970-01-01
  • 2012-03-24
  • 1970-01-01
相关资源
最近更新 更多