rust字面量

字面量就是值。值最终必须编码成二进制存储在某块内存上。

变量与字面量的关系就像杯子和水的关系。

字面量是有类型的。字面量类型有:布尔、数字、文本、字节

一、布尔

类型是bool

true

false

二、数字

通过后缀表示类型

通过前缀表示进制

通过 "_" 来分割数据,易于可读性

(一)整数

长度 有符号类型 无符号类型
8位 i8 u8
16位 i16 u16
32位 i32 u32
64位 i64 u64
128位 i128 u128
视架构而定 isize usize

isize 和 usize 类型取决于程序运行的计算机CPU类型: 若CPU是32位的,则这两个类型是32位的,同理,若CPU是64位,那么它们则是64位。

进制形式 示例
十进制 98
十六进制 0xff
八进制 0o77
二进制 0b1111_0000

例如

复制代码
7
7u8
0b111
0x7u8

(二)小数

f32

f64

例如

复制代码
0.1
0.1f64;
0.1e7;
12E-9f64;

三、文本

(一)单字符

类型是char

使用''

两个单引号之间可以是unicode字符和转义字符。

所有转义字符

名称
\x41 7-bit字符编码(2位数字,最大值为0x7F)
\u{7FFF} 24-bit Unicode字符编码(最多6个数字)
\n 换行符
\r 回车符
\t 制表符
\\ 反斜线
\' 单引号
\" 双引号
\0 Null

例子

复制代码
'a'
'中'
'\u{4567}'
'\x62'
'\"'

(二)字符串

字符串字面量类型是&str。这也就是为什么字符串字面值是不可变的;&str 是一个不可变引用。

1.双引号括起来就是一个字符串

当在换行符前面使用 \时,则\、换行符、下一行开头的所有空格都将会被忽略:

复制代码
let a = "foobar";
let b = "foo\
     bar";
assert_eq!(a,b);

2.原生字符串字面量

不做任何转义,表示原样字符串

(1)使用r""

例如,

复制代码
r"\x52"等价于"\\x52",值为\x52
"foo"; r"foo"; // foo
"\x52"; "R"; r"R"; // R
"\\x52"; r"\x52"; // \x52

(2)使用 r#""#的方式来指定字符串边界

如果字符串中有双引号怎么办?因为原生字符串里不能使用转义,所以 \" 是肯定不行的。

在双引号两侧加#,比如,

复制代码
r#""foo""#等价于"\"foo\"",值为"foo"

如果字符串中有#怎么办?那就增加边界#的数量,开头结尾需要相等数量的 #。

比如字符串里面有4个 #,那么该字符串可以用r#####"abc####def"#####来包围起来,也就是比里面的 # 多即可。

示例:

复制代码
"\"foo\""; r#""foo""#; // "foo"
"foo #\"# bar";
r##"foo #"# bar"##; // foo #"# bar

四、字节

(一)字节

字节类型其实就是u8,就是整数。

使用b''形式

两个单引号之间可以是非转义ascii字符和字节转义

字节转义

名称
\x7F 8-bit字符编码(2位数字,最大值为255)
\n 换行符
\r 回车符
\t 制表符
\\ 反斜线
\0 Null
\' '
\" "

例子

复制代码
b'7'
b'\x55'
b'\n'
b'\''
b'\\'

(二)字节串

字节串字面量类型为&[u8]。

1.使用 b""

比如

复制代码
b"world"
b"\x52\x75\x73\x74 as bytes"

2.原生字节串字面量

不做任何转义

(1)使用br""

复制代码
b"foo"; br"foo"; // foo
b"\x52"; b"R"; br"R"; // R
b"\\x52"; br"\x52"; // \x52

(2)使用br#""#

示例:

复制代码
b"\"foo\""; br#""foo""#; // "foo"
b"foo #\"# bar";
br##"foo #"# bar"##; // foo #"# bar
相关推荐
smaller_maple23 分钟前
linux问题记录1
linux·运维·服务器
报错小能手1 小时前
讲讲libevent底层机制
linux·服务器
空白诗3 小时前
mdcat 在 HarmonyOS 上的构建与适配
后端·安全·华为·rust·harmonyos
代码AC不AC4 小时前
【Linux】计算机的基石:从冯·诺依曼体系结构到操作系统管理
linux·操作系统·冯诺依曼体系结构
大柏怎么被偷了4 小时前
【Linux】进程等待
linux·运维·服务器
Rust语言中文社区5 小时前
【Rust日报】Dioxus 用起来有趣吗?
开发语言·后端·rust
小灰灰搞电子5 小时前
Rust Slint实现颜色选择器源码分享
开发语言·后端·rust
偶像你挑的噻5 小时前
12-Linux驱动开发- SPI子系统
linux·驱动开发·stm32·嵌入式硬件
松涛和鸣6 小时前
16、C 语言高级指针与结构体
linux·c语言·开发语言·数据结构·git·算法
念风6 小时前
[lvgl]如何优雅地向lv_port_linux中添加tslib支持
linux