bool保证是1个字节吗?

Tre*_*key 22 size primitive-types rust

锈病文档是模糊bool的大小.
它保证是1个字节,还是像C++一样未指定?

fn main() {
    use std::mem;
    println!("{}",mem::size_of::<bool>()); //always 1?
}
Run Code Online (Sandbox Code Playgroud)

And*_*gin 21

Rust i1向LLVM 发出bool并依赖于它产生的任何东西.LLVM使用i8(一个字节)i1在内存中表示Rust现在支持的所有平台.另一方面,由于Rust开发人员到目前为止拒绝承诺特定的bool表示,因此对未来没有确定性.

因此,它由当前的实现保证,但不受任何规范的保证.

您可以在此RFC讨论以及链接的PR和问题中找到更多详细信息.


E_n*_*ate 11

虽然历史上有一个愿望,以避免犯一个更具体的表示,但最终在2018年1月决定bool应提供以下担保:

  • 的定义bool等同于 C99 的定义_Bool
    • 反过来,对于所有当前支持的平台,的大小bool正好是 1。

文档已相应更新。在Rust 参考文献中bool定义如下:

bool类型是其可以是一个数据类型truefalse。布尔类型使用一字节内存。[...]

从 1.25.0 开始,也有记录表明 的输出std::mem::size_of::<bool>()为 1。

因此,人们确实可以依赖于bool1 个字节(如果要改变,这将是一个非常大的变化)。

也可以看看: