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

rust 从入门到精通之变量和常量

变量和常量

随着软件系统安全的重要性与日俱增, rust这门集聚高并发, 安全, 适配云环境的编程语言在市场上得到了越来越高的认可和关注。但其复杂的机制使其难以学习。且其很多特性对于其他语言是全新的,这加剧了学习的困难程度。教程主要针对rust基础进行讲解, 虽然面向小白,但更推荐有 c/cppGo 语言等开发语言的开发人员进行学习。

rustGo 一样是支持自动判断变量类型的强类型语言

即: 其编译器可以自动判断变量类型, 但变量类型不能随意更改

1.声明

声明变量使用 let 关键字

// 声明整型变量
let a = 123;	// 编译器自动推断为 i32let b :i32 = 123;    // 变量 a 等价于 变量b

2.可变变量

rust 中有一个很重要也很特别的机制, 即: 变量不可变, 这与 rust 语言的所有权机制有关, 因篇幅有限, 这里只暂时提一句

这个机制在其他语言是没有的, 且看起来很奇怪, 但稍微做过一些项目的开发者都知道,
对于一些变量, 只会赋值一次, 以供其他对象使用, 如: 数据库连接变量

这类变量只会声明一次, 供其他对象进行调用, 而不会进行二次修改

rust 在默认情况下对变量进行了保护, 若需使变量可变, 则需使用 mut 关键字声明

// 声明可变变量
let mut num :i64 = 1;
num = 2;
println!("num is {}", num);     // num is 2

3.重影

重影在 rust 中是一个很重要的机制, 其使一个变量可以被更改, 其与可变变量不同, 重影是直接将变量覆盖掉

区别:

  • 可变变量: 对变量重新赋值, 不能更改变量类型
  • 重影: 对变量进行覆盖, 可以同时更改变量数据类型和值
let mut y:i32 = 1;
let mut y:f32 = 3.1415926;	// 这里将 y 从整型改为了 浮点型
println!("y is {}",  y);    // y is 3.1415925

4.静态变量

静态变量使用 static 关键字声明
静态变量类似于其他语言中的全局变量, 不同的是, 全局变量需声明在函数之外, 但 rust 中的静态变量既可以声明在函数外, 也可以声明在函数内部
注意:

  1. 静态变量默认情况下在程序运行期间只被初始化一次, 且其作用域为整个程序, 即使在函数内部声明, 也一样
  2. 静态变量变量在初始化时, 必须指明其数据类型, 及其初始值
  3. 在 unsafe(不安全)代码块中, 可以搭配 mut 进行声明, 使静态变量可以进行修改

警告: static mutrust官方文档中提示 2027 年后将会被移除, 故不建议使用

static APP_VERSION1: f32 = 1.0;
fn main{println!("app version1 is {}", APP_VERSION1);    // app version1 is 1.0static APP_VERSION2 :f32 = 1.1;println!("app version2 is {}", APP_VERSION2);    // app version2 is 1.1// 声明可变的静态变量unsafe {static mut APP_VERSION3 :f32 = 1.2;APP_VERSION3 = 1.3;let value = APP_VERSION3;println!("app version3 is {}", value);    // app version3 is 1.3}
}

5.常量

rust 中的常量使用 const 关键字声明, 且与其他语言类似, 必须在定义时进行初始化, 指定其数据类型和值

常量与静态变量类似, 可以声明在函数外, 也可以声明在函数内部, 但常量默认情况下在程序运行期间只被初始化一次, 且其作用域为整个程序, 即使在函数内部声明, 也一样, 且常量不存在可以重新赋值的情况

常量标识符 与 变量标识符 不同, 常量标识符必须使用大写字母, 且使用下划线进行单词分割

const CONST_NUM :i32 = 100;
println!("const is {}", CONST_NUM);    // const is 100
http://www.dtcms.com/a/337598.html

相关文章:

  • 杂记 04
  • 脑潜在进展:基于潜扩散模型的三维脑磁共振成像个体时空疾病进展研究|文献速递-深度学习人工智能医疗图像
  • python的课外学习生活活动系统
  • 视觉语言导航(13)——AIR-VLN 4.3
  • Mysql核心框架知识
  • 学习雪花算法
  • 冒泡排序——简单理解和使用
  • NVIDIA 技术沙龙探秘:聚焦 Physical AI 专场前沿技术
  • Handler以及AsyncTask知识点详解
  • 数据结构部分算法记录
  • Oracle维护指南
  • 计算机大数据毕业设计推荐:基于Hadoop+Spark的食物口味差异分析可视化系统【源码+文档+调试】
  • RPM数据库损坏修复:DB_RUNRECOVERY: Fatal error, run database recovery
  • 新能源知识库(78)微网控制器与储能LCU对比
  • 【opencv-Python学习日记(7):图像平滑处理】
  • 普通用户使用docker命令
  • 「数据获取」《中国经济普查年鉴》(2004、2008、2013、2018、2023)(获取方式看绑定的资源)
  • Centos7 使用lamp架构部署wordpress
  • Django开发Web应用
  • Vitis 2023下调用math.h(log)函数提示未定义的解决办法
  • HT6875_2.8W 防削顶单声道D 类音频功率放大器
  • CoRL 2025|隐空间扩散世界模型LaDi-WM大幅提升机器人操作策略的成功率和跨场景泛化能力
  • vue3 el-table-column 列头添加 图标按钮
  • 无人机迫降模式技术要点解析
  • HTTP协议-4-浏览器是怎么抉择HTTP版本的?
  • MySQL Operator开发实战系列:特别篇 - 生产环境故障排查与性能调优指南
  • 第4.3节:awk正则表达式详解-特殊字符
  • PyTorch数据处理工具箱(数据处理工具箱概述)
  • AI大模型实战:用自然语言处理技术高效处理日常琐事
  • 鸿蒙中应用框架和应用模型