当前位置: 首页 > news >正文

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语言中的变量隐藏允许在不同的作用域中使用相同的变量名,而不会相互干扰。

相关文章:

  • 【已解决】:pip is configured with locations that require TLS/SSL
  • 懒人精灵 之 Lua 捕获 json解析异常 ,造成的脚本停止.
  • 7.electron之渲染线程发送事件,主进程监听事件
  • 如何利用chatgpt提升工作效率?
  • Redis篇之持久化
  • 云计算、Docker、K8S问题
  • 2024PMP考试新考纲-近年PMP真题练一练和很详细解析(3)
  • netty-websocket扩展协议及token鉴权补充
  • 多线程(一)
  • 【力扣】查找总价格为目标值的两个商品,双指针法
  • Mac 下JDK环境变量配置 及 JDK多版本切换
  • 吉他学习:识谱,认识节奏,视唱节奏,节拍器的使用
  • 2402d,d的静态构造器
  • 多线程基础详解(看到就是赚到)
  • 预测模型:MATLAB线性回归
  • @angular/forms 源码解析之双向绑定
  • leetcode378. Kth Smallest Element in a Sorted Matrix
  • React 快速上手 - 06 容器组件、展示组件、操作组件
  • Spring Cloud Alibaba迁移指南(一):一行代码从 Hystrix 迁移到 Sentinel
  • win10下安装mysql5.7
  • 阿里云ubuntu14.04 Nginx反向代理Nodejs
  • 从零到一:用Phaser.js写意地开发小游戏(Chapter 3 - 加载游戏资源)
  • 前端性能优化——回流与重绘
  • 全栈开发——Linux
  • 数组的操作
  • 网页视频流m3u8/ts视频下载
  • 一加3T解锁OEM、刷入TWRP、第三方ROM以及ROOT
  • 一天一个设计模式之JS实现——适配器模式
  • 自定义函数
  • PostgreSQL之连接数修改
  • ​HTTP与HTTPS:网络通信的安全卫士
  • #### go map 底层结构 ####
  • #FPGA(基础知识)
  • #预处理和函数的对比以及条件编译
  • %@ page import=%的用法
  • (02)vite环境变量配置
  • (2)关于RabbitMq 的 Topic Exchange 主题交换机
  • (2.2w字)前端单元测试之Jest详解篇
  • (4)事件处理——(2)在页面加载的时候执行任务(Performing tasks on page load)...
  • (bean配置类的注解开发)学习Spring的第十三天
  • (PWM呼吸灯)合泰开发板HT66F2390-----点灯大师
  • (solr系列:一)使用tomcat部署solr服务
  • (附源码)spring boot火车票售卖系统 毕业设计 211004
  • (附源码)计算机毕业设计ssm本地美食推荐平台
  • (没学懂,待填坑)【动态规划】数位动态规划
  • (译)2019年前端性能优化清单 — 下篇
  • (转)从零实现3D图像引擎:(8)参数化直线与3D平面函数库
  • ./configure,make,make install的作用(转)
  • .net web项目 调用webService
  • .NET 中使用 Mutex 进行跨越进程边界的同步
  • .Net+SQL Server企业应用性能优化笔记4——精确查找瓶颈
  • .Net6支持的操作系统版本(.net8已来,你还在用.netframework4.5吗)
  • .NET开发不可不知、不可不用的辅助类(一)
  • [Angular] 笔记 8:list/detail 页面以及@Input
  • [APIO2012] 派遣 dispatching