zoukankan      html  css  js  c++  java
  • Rust <1>:数据类型、变量、可变性、常量、隐藏

    rust 是强类型语言,所有变量、常量都必须有明确的数据类型;很多情况下,省略类型声明,编译器可自动推导,但不是所有情况下都会成功。

    rust 有整型、浮点型、布尔型、字符型、数组、元组、枚举、结构体等数据结构,其中:

    • 整型有:i8、i16、i32、i64、isize、u8、u16、u32、u64、usize 等
      • 其中 isize 在不同硬件架构上编译的结果不同,如在 x86-64 上为 i64,在x86-32 上则为 i32
      • 所有硬件平台的自动推导默认类型均为 i32
      • 字面值之间可以添加任意数量的 '_' 提高可读性,如:123_456_789 与 123456789 等价
      • 0xff、0o77、0b11_00 分别是十六进制、八进制、二进制表示法,另 b'A' 表示单字节字符 'A',仅支持 u8 类型
    • 浮点型有:f32、f64,自动推导默认类型 f64

      

    一、rust 中的变量值默认是不允许改变的,即不可二次斌值,如下代码无法通过编译,需要在变量前添加 mut 标识

    fn main() {
        let zVar: i64 = 0;    // let mut zVar: i64 = 0;
        zVar = 1;
        println!("{}", zVar);
    }

    二、rust 中可以连续定义同名变量,新的变量将覆盖旧的变量,且前后的变量类型可以不一致:即 shadowing 特性。

    fn main() {
        let zvar: i32 = 0;
        let zvar: i32 = zvar + 1;
        let zvar: i32 = zvar * 2;
        let zvar: &str = "Hello World!";
        let zvar = zvar.len();

        println!("{}", zvar);
    }

    三、rust 中常量定义必须显示指明数据类型,同一作用域内不可重名,局部定义覆盖全局定义。

    const GLOB_NUM: f64 = 0.0;    // 右值必须符合左值声明的数据类型,如指定 f64,但右值赋值为 1,则无法通过编译。
    
    fn main() {
        let zvar: i32 = 0;
        let zvar: i32 = zvar + 1;
        let zvar: i32 = zvar * 2;
        let zvar: &str = "Hello World!";
        let zvar = zvar.len();
    
        const GLOB_NUM: f64 = 1.0;
    
        println!("{} {}", zvar, GLOB_NUM);
    }

    四、结构体

    fn main() {
        #[derive(Debug)]
        struct _T {
            a: i32,
            b: u64,
        }
    
        let mut _test = _T {a: 0, b: 0};    // 必须斌值,否则后续无法使用
    
        _test.a = 8;
        _test.b = 8;
    
        println!("{} {}
    {:?}", _test.a, _test.b, _test);
    }

    注:

    • 结构体类型定义末尾不加分号 ';'
    • 结构体实例定义所有成员变量必须全部初始化
    • #[derive(Debug)] 用于启用调试打印格式
    • 允许在函数体内定义局部结构体

    五、枚举

    #[derive(Debug)]
    enum _T {
        _A(i32),
        _B(String),
        _C(i64, u32),
        _D,
        _E{x: i32, y: i32},
    }
    
    impl _T {
        fn print_self(&self) -> i32 {
            println!("{:?}", self);
            0
        }
    }
    
    fn main() {
        let _var = _T::_D;
        let _var0 = _T::_E{x: 1, y:2};
    
        _var.print_self();
        _var0.print_self();
    }
    • rust 的枚举成员可以进一步梆定任意类型数据结构
    • 所有成员属于同一数据类型,方法共享

    ____

  • 相关阅读:
    MessageDigest类提供MD5或SHA等加密算法
    23种设计模式之策略设计模式
    n & (n-1)
    ubuntu 常用软件配置
    minicom 没有tx 信号
    usb 驱动
    全局变量的危害
    编写安全代码:小心volatile的原子性误解
    ADB Server Didn’t ACK ,failed to Start Daemon 解决方法
    字长
  • 原文地址:https://www.cnblogs.com/hadex/p/7763481.html
Copyright © 2011-2022 走看看