我的理解是,enum就像union在C中一样,系统将在枚举中分配最大的数据类型.
enum E1 {
DblVal1(f64),
}
enum E2 {
DblVal1(f64),
DblVal2(f64),
DblVal3(f64),
DblVal4(f64),
}
fn main() {
println!("Size is {}", std::mem::size_of::<E1>());
println!("Size is {}", std::mem::size_of::<E2>());
}
Run Code Online (Sandbox Code Playgroud)
为什么E1按预期占用8个字节,但E2占用16个字节?
给定一个带有一些未键入值的简单枚举,可能希望此枚举的大小使用较小的整数类型,然后使用默认值.例如,这提供了将枚举存储在数组中的能力u8.
enum MyEnum {
A = 0,
B,
C,
}
Run Code Online (Sandbox Code Playgroud)
可以使用u8数组并将它们与某些常量进行比较,但我希望使用枚举来确保在匹配语句中处理所有可能性.
如何指定它以size_of匹配所需的整数类型?
我决定实现一个使用几个标志的协议,所以我开始enum为标志定义s.然而,当我想定义有两个值可以是一个标志true或者false我得到一个错误信息:
// The protocol definition says that the flag
// can have two values true or false, so I could just use
// plain bool, but I want another name for true and false.
enum Flag {
ONE = true,
TWO = false,
}
Run Code Online (Sandbox Code Playgroud)
error[E0308]: mismatched types
--> src/lib.rs:5:11
|
5 | ONE = true,
| ^^^^ expected isize, found bool
error[E0308]: mismatched types
--> src/lib.rs:6:11
|
6 | TWO = false,
| ^^^^^ …Run Code Online (Sandbox Code Playgroud)