Rust 初体验3

“开胃”代码

fn main() {
    let (a, mut b): (bool,bool) = (true, false);
    // a = true,不可变; b = false,可变
    println!("a = {:?}, b = {:?}", a, b);

    b = true;
    assert_eq!(a, b);
}

Rust语法和C语言有很大不同,特别是在变量声明、打印输出和错误处理等方面。

  1. fn main() {...}:这是Rust程序的主函数,类似于C语言中的int main() {...}。 但是 fn 不是数据类型,而是函数类型。

  2. let (a, mut b): (bool,bool) = (true, false);:这里定义了两个布尔变量a和b,其中a是不可变的(immutable),而b是可变的(mutable)。这与C语言中的定义方式不同,C语言通常使用const关键字来定义常量,而变量则不需要特殊声明。

  3. println!("a = {:?}, b = {:?}", a, b);:这是一个宏调用,用于打印变量a和b的值。在C语言中,通常使用printf函数来实现类似的功能。

  4. b = true;:这行代码将变量b的值改为true。在C语言中,可以直接使用赋值运算符=来改变变量的值。

  5. assert_eq!(a, b);:这是一个断言宏,用于检查两个表达式是否相等。如果不相等,程序会在这里停止执行并报告错误。在C语言中,通常需要自己编写比较和错误处理的代码。

const

Rust语言和C语言都支持常量(const)的概念,但它们在定义、使用和内存存储方面存在一些差异。

1.定义方式

  • C语言中的const变量需要在声明时指定类型和初始值,例如const int x = 10;

  • Rust语言中的const常量在定义时不需要显式指定类型,而是通过初始值自动推断类型,例如const X: i32 = 10;

2.可变性

  • C语言中的const变量的值,在程序运行过程中不能被修改,但它们所指向的对象(如果是指针类型的const变量)是可以被修改的。

  • Rust语言中的const常量的值,在编译时就已经确定,并且在运行过程中不能被修改。Rust还提供了不可变变量(let)的概念,用于在运行时绑定一个不可变的值。

3.作用域

  • C语言中的const变量的作用域取决于其声明的位置。全局const变量在整个程序中可见,而局部const变量的作用域仅限于函数内部。

  • Rust语言中的const常量具有静态作用域,即它们在程序的整个生命周期内都是可见的,类似于C语言中的全局const变量。

4.内存存储

  • C语言中的const变量通常保存在程序的只读内存区域(ROM)中,具体的存储位置取决于变量的类型和编译器的实现。

  • Rust语言中的const常量的值在编译时就已经被确定,并且被直接嵌入到生成的可执行文件中。这意味着Rust的const常量不需要额外的内存分配,可以提高程序的性能。

Rust的const常量在编译时确定,并且具有静态作用域,而C语言的const变量在运行时确定,并且作用域取决于其声明的位置。

此外,Rust的const常量的值被直接嵌入到生成的可执行文件中,而C语言的const变量的值通常保存在程序的只读内存区域中。

Rust 常量

在Rust中,常量和变量有以下差异:

第一,常量不允许使用 mut。常量不仅仅默认不可变,而且自始至终不可变。

第二,常量使用 const 关键字而不是 let 关键字来声明,并且值的类型必须标注。

第三,常量可以在任何作用域中声明,包括全局作用域。

const MAX_POINTS: u32 = 100_000;

Rust 常量的命名约定是字母全部大写,使用下划线分隔单词,对数字字面量插入下划线,可提高可读性。

变量遮蔽(shadowing)

在 Rust 中,如果一个块作用域中的变量与外层作用域中的变量同名,那么在块内,外层作用域中的变量将被隐藏。

例如,在下面的代码中,变量 x 在外层作用域中被声明,但在内层作用域中被重新声明。在内部作用域中,变量 x 的值是 5,而不是外层作用域中的 10。

fn main() {
    let x = 5;
    {
        let x = x + 1;
        println!("The value of x in the inner scope is: {}", x);
    }
    println!("The value of x in the outer scope is: {}", x);
}

Rust中的变量遮蔽,与C语言中的变量隐藏,都是为了解决同名变量之间的冲突问题。

两者的差别在于:

  • 作用域:Rust中的变量遮蔽发生在同一作用域内,而C语言中的变量隐藏通常发生在嵌套的作用域之间。

  • 可见性:在Rust中,被遮蔽的变量在当前作用域内不再可见,而在C语言中,内部作用域的变量会隐藏外部作用域的同名变量,但外部作用域的变量在内部作用域之外仍然可见。

  • 目的:Rust中的变量遮蔽旨在提高代码的可读性和可维护性,避免在代码的不同部分意外地使用相同的变量名;而C语言中的变量隐藏允许在不同的作用域中使用相同的变量名,而不会相互干扰。

你可能感兴趣的:(rust,开发语言)