2.2.2 字符、布尔、单元类型

1 字符、布尔、单元类型

1.1 字符类型(char)

下面的代码展示了几个颇具异域风情的字符:

1
2
3
4
5
6
fn main() {
let c = 'z';
let z = 'ℤ';
let g = '国';
let heart_eyed_cat = '😻';
}

在 Rust 语言中这些都是字符,Rust 的字符不仅仅是 ASCII,所有的 Unicode 值都可以作为 Rust 字符,包括单个的中文、日文、韩文、emoji 表情符号等等,都是合法的字符类型。Unicode 值的范围从 U+0000 ~ U+D7FFU+E000 ~ U+10FFFF。不过“字符”并不是 Unicode 中的一个概念,所以人在直觉上对“字符”的理解和 Rust 的字符概念并不一致。

由于 Unicode 都是 4 个字节编码,因此字符类型也是占用 4 个字节:

1
2
3
4
fn main() {
let x = '中';
println!("字符'中'占用了{}字节的内存大小",std::mem::size_of_val(&x));
}

输出如下:

1
2
3
4
$ cargo run
Compiling ...

字符'中'占用了4字节的内存大小

注意,我们还没开始讲字符串,但是这里提前说一下,和一些语言不同,Rust 的字符只能用 ' 来表示, "" 是留给字符串的。

1.2 布尔(bool)

Rust 中的布尔类型有两个可能的值: truefalse,布尔值占用内存的大小为 1 个字节:

1
2
3
4
5
6
7
8
9
fn main() {
let t = true;

let f: bool = false; // 使用类型标注,显式指定f的类型

if f {
println!("这是段毫无意义的代码");
}
}

使用布尔类型的场景主要在于流程控制,例如上述代码中的 if 就是其中之一。

1.3 单元类型

单元类型就是 () ,对,你没看错,就是 () ,唯一的值也是 () ,一些读者读到这里可能就不愿意了,你也太敷衍了吧,管这叫类型?

只能说,再不起眼的东西,都有其用途,在目前为止的学习过程中,大家已经看到过很多次 fn main() 函数的使用吧?那么这个函数返回什么呢?

没错 main 函数就返回这个单元类型 (),你不能说 main 函数无返回值,因为没有返回值的函数在 Rust 中是有单独的定义的:发散函数( diverge function ),顾名思义,无法收敛的函数。

例如常见的 println!() 的返回值也是单元类型 ()

再比如,你可以用 () 作为 map 的值,表示我们不关注具体的值,只关注 key。这种用法和 Go 语言的 struct{} 类似,可以作为一个值用来占位,但是完全 不占用 任何内存。


2.2.2 字符、布尔、单元类型
http://binbo-zappy.github.io/2025/01/05/rust圣经/2-2-2-字符布尔单元类型/
作者
Binbo
发布于
2025年1月5日
许可协议