标准 C++ 中是否有固定宽度的 bool 类型?
Is there a fixed-width bool type in standard C++?
据我所知,bool
类型的宽度是实现定义的。但是是否有任何固定宽度的布尔类型,或者我应该坚持使用,例如 uint8_t
来表示固定宽度的布尔值?
[编辑]
我制作了这个 python 脚本,它自动生成一个 C++ class,它可以保存我希望能够在微控制器和我的计算机之间发送的变量。它的工作方式是它还保留两个数组,其中包含一个指向这些变量中的每一个的指针以及每个变量的大小。这为我提供了必要的信息,可以轻松地序列化和反序列化这些变量中的每一个。但是,为了使其起作用,变量类型的 sizeof、endianness 等必须在两侧相同,因为我在两侧使用相同的生成代码。
我不知道这是否会成为一个问题,但我不希望它成为问题。我之前已经使用过这个(32 位 ARM)芯片,过去在发送整数和浮点类型时没有遇到过问题。然而,我要过几天才能回来并可以在芯片上尝试布尔值。以后这可能是一个更大的问题,因为此代码以后可能会在其他芯片上重复使用。
所以我的问题是。标准库中是否定义了固定宽度 bool
类型,或者我应该只使用 uint8_t 来表示布尔值?
没有。如果您需要确定大小,只需使用 uint8_t
。在 C 相关语言中,任何整数类型都可以很容易地被视为布尔值。有关标准如何不保证 bool
的大小为任何特定值的详细讨论,请参阅 。
据我所知,bool
类型的宽度是实现定义的。但是是否有任何固定宽度的布尔类型,或者我应该坚持使用,例如 uint8_t
来表示固定宽度的布尔值?
[编辑] 我制作了这个 python 脚本,它自动生成一个 C++ class,它可以保存我希望能够在微控制器和我的计算机之间发送的变量。它的工作方式是它还保留两个数组,其中包含一个指向这些变量中的每一个的指针以及每个变量的大小。这为我提供了必要的信息,可以轻松地序列化和反序列化这些变量中的每一个。但是,为了使其起作用,变量类型的 sizeof、endianness 等必须在两侧相同,因为我在两侧使用相同的生成代码。 我不知道这是否会成为一个问题,但我不希望它成为问题。我之前已经使用过这个(32 位 ARM)芯片,过去在发送整数和浮点类型时没有遇到过问题。然而,我要过几天才能回来并可以在芯片上尝试布尔值。以后这可能是一个更大的问题,因为此代码以后可能会在其他芯片上重复使用。
所以我的问题是。标准库中是否定义了固定宽度 bool
类型,或者我应该只使用 uint8_t 来表示布尔值?
没有。如果您需要确定大小,只需使用 uint8_t
。在 C 相关语言中,任何整数类型都可以很容易地被视为布尔值。有关标准如何不保证 bool
的大小为任何特定值的详细讨论,请参阅 。