当你有一个Option<&T>
,编译器知道NULL
永远不是&T
和encodes the None
variant as NULL
instead的可能值.这样可以节省空间:
use std::mem;
fn main() {
assert_eq!(mem::size_of::<&u8>(), mem::size_of::<Option<&u8>>());
}
但是,如果对非指针类型执行相同操作,则不需要额外的位来存储该值,并且需要额外的空间:
use std::mem;
fn main() {
// fails because left is 1 and right is 2
assert_eq!(mem::size_of::<u8>(), mem::size_of::<Option<u8>>());
}
总的来说,这是正确的.然而,我想 Select 优化,因为我知道我的类型有一些不可能的值.作为一个虚构的例子,我可能有一个有年龄的玩家角色.年龄可能未知,但永远不会高达255
岁:
struct Age(u8);
struct Player {
age: Option<Age>,
}
我希望能够告知优化器这个约束——Age
永远不能是255
,所以将该位模式用作None
是安全的.这可能吗?