• rust 基础数据类型


    默认类型

    大部分情况下,rust 可以基于上下文自动推导出变量的类型。下面代码中,变量 x 没有显式,rust 默认是 i32 类型。

    fn main() {
        let x = 5;
    }
    
    
    • 1
    • 2
    • 3
    • 4

    但也有一些例外情况,比如,字符串类型的转换中变量 x 的类型,rust 就自动推导不出来。这种情况就需要显示的声明变量的类型。

    fn main() {
        let x = "5".parse().expect("fail");
        let sum = x + 10;
    }
    
    • 1
    • 2
    • 3
    • 4

    整数类型

    整数的类型声明有别于其他语言,有符号整数类型名称以 u 开头,无符号以 i 开头。usize 和 isize 是两种特殊的整数类型,它们的长度取决于系统是 32位还是64位。

    长度有符号无符号
    8bitu8i8
    16bitu16i16
    32bitu32i32
    64bitu64i64
    archusizeisize

    对于位数为 n 的有符号整形,它可以存储 − 2 ( n − 1 ) -2^{(n-1)} 2(n1) 2 ( n − 1 ) − 1 2^{(n-1)}-1 2(n1)1范围内的所有整数,无符号可以存储 0 到 2 n − 1 2^{n}-1 2n1 范围内的所有整数。

    字符类型

    在Rust中,char类型被用于描述语言中最基础的单个字符。需要区分的是,char类型使用单引号指定,而不同于字符串使用双引号指定。

    Rust中的char类型占4字节,是一个Unicode标量值,这也意味着它可以表示比ASCII多得多的字符内容。拼音字母、中文、日文、韩文、零长度空白字符,甚至是emoji表情都可以作为一个有效的char类型值。

    元组类型

    元组将不同类型的多个值组合进一个复合类型中,在声明的时候会确定长度,无法在声明后增加或减少其中的元素数量。

    fn main() {
        let tup: (i32, f64, u32) = (1, 2.0, 3);
    }
    
    • 1
    • 2
    • 3

    下面通过 let 的方式来解析元组,但这种方式并不方便,我们还可以通过索引来进行访问。

    fn main() {
        let tup: (i32, f64, u32) = (1, 2.0, 3);
        let (x, y, z) = tup;
        println!("x:{}, y:{}, z:{}", x, y, z);
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5

    通过索引的方式来进行访问:

    fn main() {
        let tup: (i32, f64, u32) = (1, 2.0, 3);
        println!("x:{}, y:{}, z:{}", tup.0, tup.1, tup.2);
    }
    
    • 1
    • 2
    • 3
    • 4

    数组

    与元组不同,数组中的每一个元素都必须是相同的类型。Rust中的数组拥有固定的长度,一旦声明就再也不能随意更改大小。

    下面通过一对方括号来声明数组,如果要显示的指定数组类型,类型声明也需要一对方括号,括号中写上数组元素的类型,一个分号,以及数组的长度。

    fn main() {
        let a = [1, 2, 3];
    }
    
    • 1
    • 2
    • 3

    显示地声明数组类型:

    fn main() {
        let a: [i32; 3] = [1, 2, 3];
    }
    
    • 1
    • 2
    • 3

    Rust 还提供一种初始化数组的语法,前提是你想创建一个包含相同元素,指定长度的数组,你可以在方括号中指定元素的值和长度。下面的例子就创建了一个 [“prefix_”, “prefix_”, “prefix_”] 数组。

    fn main() {
        let a = ["prefix_"; 3];
        println!("{}", a[0])
    }
    
    • 1
    • 2
    • 3
    • 4
  • 相关阅读:
    js函数( 普通函数、箭头函数 ) 内部this的指向
    统一SQL 支持Oracle到LightDB-Oracle特性转换
    tomcat web.xml文件中servlet的load-on-startup
    服务器前端部署总结
    Unity Shader第二章作业
    如何在VC++ 6.0中实现拖动指令改变执行路径 (指令飞越)?
    django rest framework快速使用
    组件通讯的方式有哪些
    SPDK NVMe Reservation使用简介
    金字塔思维
  • 原文地址:https://blog.csdn.net/f1520107395/article/details/134231094