布尔类型
bool, 可以是 true
或 false
, bool 占用一个字节, 即:
#![allow(unused)] fn main() { use std::mem::size_of; assert_eq!(size_of::<bool>(), 1); }
可以将 bool 值转换为整数, true
的值是 1
, false
的值是 0
. 但不能反过来将整数转为 bool 类型:
#![allow(unused)] fn main() { assert_eq!(true as i32, 1); assert_eq!(false as i32, 0); }
与 C++ 不同, Vec<bool>
并没有被单独优化.
bool 的内存布局
bool 占用一个字节, 在二进制层面, 它只取两个值:
0b01
表示 true0b00
表示 false
比如, 下面的代码:
fn main() { let _is_checked = false; let _is_hover = true; }
我们在调试器检查, 它们的内存分别如下:
常用的函数
与 C/C++ 语言不同, Rust 为 bool 类型提供了一些好用的函数, 方便编写函数式风格的代码.
then_some(t)
如果为 true, 就返回 Some(t)
; 否则直接返回 None
:
#![allow(unused)] fn main() { assert_eq!(false.then_some(0), None); assert_eq!((1 + 1 == 2).then_some(2), Some(2)); }
then(f)
如果为 true, 就执行函数并返回 Some(f())
; 否则直接返回 None
:
#![allow(unused)] fn main() { assert_eq!(false.then(|| 0), None); assert_eq!(true.then(|| 0), Some(0)); }