Rust 中枚举的利基优化是如何工作的?

ken*_*esu 3 enums rust

Option<bool>个例子,我知道Option<bool>和的大小bool都是 1 字节,但我仍然不能 100% 理解其变体的内存分配是如何发生的。

它的工作原理如下吗?

Some(true)00000001

Some(false)00000000

None00000001除了或00000000(例如:)00000010之外的东西(根据下面的评论从“任何东西”更改)

mou*_*ail 6

此代码将打印 的所有 3 个可能值的字节值Option<bool>

fn main() {
    let a:[Option<bool>;3]=[Some(true), Some(false), None];
    
    for i in a {
        // Re-Interpret the bytes of the option as a number
        let j:u8 = unsafe { std::mem::transmute(i) };
        println!("{i:?} {j:?}");
    }
}
Run Code Online (Sandbox Code Playgroud)

输出:

Some(true) 1
Some(false) 0
None 2
Run Code Online (Sandbox Code Playgroud)

好像None表示为2。

游乐场链接

请注意,这并未正式指定,因此在未来版本中可能会发生变化。不要依赖这种行为。