在Rust中还可以用const关键字做声明。如下所示:
const GLOBAL: i32 = 0;
使用const声明的是常量,而不是变量。因此一定不允许使用mut关键字修饰这 个变量绑定,这是语法错误。常量的初始化表达式也一定要是一个编译期常量,不 能是运行期的值。它与static变量的最大区别在于:编译器并不一定会给const常量分 配内存空间,在编译过程中,它很可能会被内联优化。因此,用户千万不要用hack 的方式,通过unsafe代码去修改常量的值,这么做是没有意义的。以const声明一个 常量,也不具备类似let语句的模式匹配功能。
2.2 基本数据类型 2.2.1 bool
布尔类型(bool)代表的是“是”和“否”的二值逻辑。它有两个值:true和false。 一般用在逻辑表达式中,可以执行“与”“或”“非”等运算。
fn main() {
let x = true;
let y: bool = !x;
let z = x && y;
println!(“{}”, z);
let z = x || y;
println!(“{}”, z);
letz=x&y; println!(“{}”, z);
letz=x|y; println!(“{}”, z);
letz=x^y;
println!(“{}”, z);
}
// 取反运算
// 逻辑与,带短路功能
// 逻辑或,带短路功能
// 按位与,不带短路功能 // 按位或,不带短路功能 // 按位异或,不带短路功能
一些比较运算表达式的类型就是bool类型:
fn logical_op(x: i32, y: i32) {
let z : bool = x < y;
println!(“{}”, z);
}
if a >= b { …
} else { …
}
2.2.2 char 字符类型由char表示。它可以描述任何一个符合unicode标准的字符值。在代码
中,单个的字符字面量用单引号包围。
let love = ‘❤’; // 可以直接嵌入任何 unicode 字符 字符类型字面量也可以使用转义符:
bool类型表达式可以用在if/while等表达式中,作为条件表达式。比如:
let c1 = ‘\n’;
let c2 = ‘\x7f’;
let c3 = ‘\u{7FFF}’;
// 换行符
// 8 bit 字符变量 // unicode字符
因为char类型的设计目的是描述任意一个unicode字符,因此它占据的内存空间 不是1个字节,而是4个字节。
对于ASCII字符其实只需占用一个字节的空间,因此Rust提供了单字节字符字 面量来表示ASCII字符。我们可以使用一个字母b在字符或者字符串前面,代表这个 字面量存储在u8类型数组中,这样占用空间比char型数组要小一些。示例如下:
let x :u8 = 1;
let y :u8 = b’A’;
let s :&[u8;5] = b"hello";
let r :&[u8;14] = br#“hello \n world”#;