当前位置: 首页 > 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.lryc.cn/news/624330.html

相关文章:

  • 视觉语言导航(14)——VLN ON ROBOTIC 4.4
  • 多线程初阶-线程安全 (面试和工作的重点!!!)
  • Gartner发布2025年AI与网络安全成熟度曲线:用AI增强网络安全计划的27项技术与创新
  • 猫头虎AI分享|一款智能量化交易系统:QuantCell,从数据收集到策略执行全流程自动化
  • #Datawhale 组队学习#8月-工作流自动化n8n入门-1
  • 牛子图论进阶
  • ChatGPT-5 对教育行业的影响与案例研究
  • 【领码课堂】AI写码不再“盲跑”,方案先行,自动化高效落地
  • 【完整源码+数据集+部署教程】无人机目标检测系统源码和数据集:改进yolo11-efficientViT
  • MQTT(轻量级消息中间件)基本使用指南
  • lesson41:MySQL数据库进阶实战:视图、函数与存储引擎全解析
  • 大数据计算引擎(一)——Spark
  • 国产化Excel处理组件Spire.XLS教程:使用 C# 从数据库导出数据到 Excel(含 SQL 示例)
  • 利用DeepSeek辅助WPS电子表格ET格式分析
  • iOS 应用上架全流程实践,从开发内测到正式发布的多工具组合方案
  • C++ 是技术面试中的高频考察测点(基础知识)
  • 【数据库】Navicat 导入 Excel 数据乱码问题的解决方法
  • Laravel中如何使用php-casbin
  • Effective C++ 条款48:认识模板元编程
  • ARM 架构简明教程学习笔记
  • 23.CNN系列网络思考
  • 科伦博泰:商业化引爆点已至,冲向Biopharma的“最后一公里”
  • 基于C语言实现的HRV分析方法 —— 与Kubios和MATLAB对比
  • C++11列表初始化 {}
  • 【数据可视化-92】使用 Pyecharts 绘制乡镇街道级地图:以安徽省黄山市休宁县为例(我的老家)
  • 【数据结构】深入理解双向链表:结构、实现与对比分析
  • 后台管理系统-6-vue3之mockjs模拟和axios请求数据
  • 国产!全志T113-i 双核Cortex-A7@1.2GHz 工业开发板—ARM + DSP、RISC-V核间通信开发案例
  • 算法魅力-BFS解决多源最短路
  • go语言条件语if …else语句