Rust基本数据类型

2022-06-01 09:07:39 浏览数 (1)

[TOC]


类型系统概述

什么是类型?类型是对二进制数据的一种约束行为。类型比起直接使用二进制数据,有许多优势:

  • 减少开发者心智负担
  • 安全
  • 容易优化

常见的类型分类:

  • 静态类型:在编译期对类型进行检查
  • 动态类型:在运行期对类型进行检查
  • 强类型:不允许隐式类型转换
  • 弱类型:允许进行隐式类型转换

C 语言由于允许隐式类型转换因此是静态弱类型语言,许多人易将 C 语言误认为静态强类型,需要特别注意:

代码语言:javascript复制
int main() {
    long a = 10;
    return a;
}
  • Rust 是静态强类型语言

变量和可变性

创建和使用变量

在 Rust 代码中,可以使用 let 关键字将值绑定到变量:

代码语言:javascript复制
fn main() {
    let x = 5;
    println!("The value of x is: {}", x);
}

println 是一个宏,它是最常用的将数据打印在屏幕上的方法。目前,我们可以简单地将它视为一个拥有可变参数数量的函数,在后面的章节中我们会对宏进行详细的讨论。

可变性

在 Rust 中,变量默认是不可变的,一旦一个值绑定到一个名称,就不能更改该值:

代码语言:javascript复制
fn main() {
    let x = 5;
    println!("The value of x is: {}", x);
    x = 6;  // cannot assign twice to immutable variable `x`
    println!("The value of x is: {}", x);
}

但有时候允许变量可变是非常有用的。通过在变量名前面添加 mut 来使它们可变:

代码语言:javascript复制
fn main() {
    let mut x = 5;
    println!("The value of x is: {}", x);
    x = 6;
    println!("The value of x is: {}", x);
}

常量和变量

不可变变量容易让你联想到另一个概念:常量。在 Rust 中,常量使用 const 定义,而变量使用 let 定义:

  • 不允许对常量使用修饰词 mut,常量始终是不可变的
  • 必须显示标注常量的类型
  • 常量可以在任何作用域中声明,包括全局作用域
  • 常量只能设置为常量表达式,而不能设置为函数调用的结果或只能在运行时计算的任何其他值
代码语言:javascript复制
const A_CONST: i32 = 1;

隐藏(Shadowing)

可以声明一个与前一个变量同名的新变量,并且新变量会隐藏前一个变量,这种操作被称为隐藏(Shadowing)。

代码语言:javascript复制
fn main() {
    let x = 5;

    let x = x   1;

    let x = x * 2;

    println!("The value of x is: {}", x);
}

基础数据类型

Rust 是一门静态编程语言,所有变量的类型必须在编译期就被明确固定。

整数

Rust 中有 12 种不同的整数类型:

长度

有符号

无符号

8-bit

i8

u8

16-bit

i16

u16

32-bit

i32

u32

64-bit

i64

u64

128-bit

i128

u128

arch

isize

usize

  • 对于未明确标注类型的整数,Rust 默认采用 i32.
  • isize 和 usize 根据系统的不同而有不同的长度.

浮点数

Rust 有两种浮点数类型,为 f32f64,后者精度更高。对于未明确标注类型的小数,Rust 默认采用 f64.

代码语言:javascript复制
fn main() {
    let x = 2.0; // f64

    let y: f32 = 3.0; // f32
}

布尔值

与大多数其他编程语言一样,Rust 中的布尔类型有两个可能的值:truefalse。布尔值的大小是一个字节。

代码语言:javascript复制
fn main() {
    let t = true;

    let f: bool = false;
}

字符

Rust 支持单个字符,字符使用单引号包装。

代码语言:javascript复制
fn main() {
    let c = 'z';
    let z = 'ℤ';
    let heart_eyed_cat = '


	

0 人点赞