Rust 数据类型使用注意点

文章目录

  • 前言
  • 一、Rust 的数据类型
      • 基本数据类型:
      • 复合数据类型:
  • 二、使用注意点📢
      • 整型溢出
  • 总结


前言

Rust 学习系列 ,学习rust的数据类型。牢记其中的注意点📢


一、Rust 的数据类型

Rust 提供了丰富的数据类型,包括基本数据类型和复合数据类型。

基本数据类型:

  1. 布尔类型(bool):表示 true 或 false。
  2. . 字符类型(char):表示单个 Unicode 字符。
  3. 数值类型:
    • 整数类型(i8、i16、i32、i64、i128、isize):有符号整数。
    • 无符号整数类型(u8、u16、u32、u64、u128、usize):无符号整数。
    • 浮点数类型(f32、f64):单精度和双精度浮点数。

复合数据类型:

  1. 数组(array):固定大小的相同类型元素的集合。
  2. 元组(tuple):固定大小的不同类型元素的集合。
  3. 切片(slice):动态大小的数组引用。
  4. 字符串(string):动态大小的 UTF-8 字符串。
  5. 结构体(struct):自定义数据类型,可以包含多个字段。
  6. 枚举(enum):定义一个类型的取值集合。
  7. 特定用途的数据类型:例如 Option、Result<T, E> 等。

在这里插入图片描述

在这里插入图片描述

除了这些基本和复合数据类型,Rust 还提供了一些高级数据类型和特性,如引用、生命周期、泛型、trait 等,用于更灵活地处理数据。这些数据类型和特性使得 Rust 具有强大的类型系统和内存安全性。

来一些代码示例练习一波⚽️

fn main() {
    // 声明和初始化变量
    let number: i32 = 42;
    let is_true: bool = true;
    let letter: char = 'a';
    let array: [i32; 3] = [1, 2, 3];
    let tuple: (i32, bool) = (10, false);

    // 使用变量
    println!("The number is: {}", number);
    println!("Is it true? {}", is_true);
    println!("The letter is: {}", letter);
    println!("The array is: {:?}", array);
    println!("The tuple is: {:?}", tuple);

    // 使用引用
    let reference: &i32 = &number;
    println!("The reference is: {}", reference);
    
     let mut number2: i32 = 42;
    let mutable_reference: &mut i32 = &mut number2;
    *mutable_reference += 1;
    println!("The mutable reference is: {}", mutable_reference);
}
 

二、使用注意点📢

  1. 变量绑定:在声明变量时,需要指定变量的数据类型。Rust的类型推导功能可以自动推断变量的数据类型,但在某些情况下需要明确指定类型。

  2. 不可变和可变性:Rust中默认情况下,变量是不可变的。如果需要修改变量的值,需要使用mut关键字声明可变变量。

  3. 所有权系统:Rust的所有权系统是其最重要的特性之一。它规定了变量在内存中的所有权和使用规则。在Rust中,每个值都有一个所有者,并且只能有一个所有者。所有权可以通过移动(move)或借用(borrow)的方式转移。移动所有权规定了变量在传递给函数时的所有权转移,而借用所有权规定了变量在引用(borrow)时的限制。这个所有权系统可以避免内存安全问题和数据竞争。

  4. 引用:Rust中的引用(Reference)是指对变量的借用,它允许通过引用访问变量的值,但不允许修改变量的值。引用在函数传参和数据共享等场景下非常有用。

  5. 字面量和类型转换:Rust中的字面量可以直接表示特定类型的值,例如整数、浮点数和布尔值等。如果需要将一个类型转换为另一个类型,可以使用as关键字进行类型转换。

  6. 枚举和结构体:Rust提供了枚举(Enum)和结构体(Struct)两种复合数据类型。枚举用于表示一组相关的值,而结构体用于表示一组相关的字段。

整型溢出

比方说有一个 u8 ,它可以存放从 0 到 255 的值。那么当你将其修改为范围之外的值,比如 256,则会发生整型溢出(integer overflow),这会导致两种行为的其中一种。当在调试(debug)模式编译时,Rust 会检查整型溢出,若存在这些问题则使程序在编译时 panic。Rust 使用 panic 这个术语来表明程序因错误而退出。第 9 章 “panic! 与不可恢复的错误”会详细介绍 panic。

在当使用 --release 参数进行发布(release)模式构建时,Rust 不检测会导致 panic 的整型溢出。相反当检测到整型溢出时,Rust 会进行一种被称为二进制补码包裹(two’s complement wrapping)的操作。简而言之,大于该类型最大值的数值会被“包裹”成该类型能够支持的对应数字的最小值。比如在 u8 的情况下,256 变成 0,257 变成 1,依此类推。程序不会 panic,但是该变量的值可能不是你期望的值。依赖整型溢出包裹的行为不是一种正确的做法。

要显式处理溢出的可能性,可以使用标准库针对原始数字类型提供的以下一系列方法:

使用 wrapping_* 方法在所有模式下进行包裹,例如 wrapping_add
如果使用 checked_* 方法时发生溢出,则返回 None 值
使用 overflowing_* 方法返回该值和一个指示是否存在溢出的布尔值
使用 saturating_* 方法使值达到最小值或最大值


总结

Rust 数据类型的介绍,其中介绍数据使用需要特别注意的点

更多内容请参考
https://rustwiki.org/zh-CN/book/ch03-02-data-types.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/374843.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

如何更改默认浏览器?

打开设置---应用---默认应用 点击你想要设置为默认浏览器的应用&#xff08;假设为Microsoft Edge&#xff09;&#xff0c;点击设置默认值就可以了。

MC34063异常发热分析

问题描述&#xff1a; 工程现场反馈若干电源转换模块损坏&#xff0c;没有输出。拿到问题模块后&#xff0c;查看有一个MC34063周围的PCB有比较明显的高温痕迹&#xff0c;配套的电感也有明显的高温过热痕迹。 问题调查&#xff1a; MC34063的电路非常经典&#xff08;虽然自…

Google聊天机器人Bard计划更名为Gemini并推出新功能;12 个 RAG 痛点和建议

&#x1f989; AI新闻 &#x1f680; Google聊天机器人Bard计划更名为Gemini并推出新功能 摘要&#xff1a;Google的聊天机器人Bard即将更名为Gemini并在2月7日上线。Gemini将推出付费计划Gemini Advanced&#xff0c;类似于ChatGPT Plus的付费模式&#xff0c;用户可以访问强…

使用mmrotate对自定义数据集进行检测

这里写自定义目录标题 安装虚拟环境创建与准备安装mmrotate 自定义数据集标注数据与格式转换数据集划分与大图像切片 训练与测试修改配置文件执行训练进行测试鸣谢 安装 mmrotate是一个自带工作目录的python工具箱&#xff0c;个人觉得&#xff0c;在不熟悉的情况下&#xff0…

忘掉Access吧,全新0代码表格编程工具登场,中国造

灵活好用&#xff0c;广为流传 曾几何时&#xff0c;Access作为微软推出的关系数据库管理系统&#xff0c;风光无限。它不仅是Office家族的一员&#xff0c;更以其易上手、开发周期短的特点&#xff0c;成为非IT专业办公人员的得力助手。一句“Excel使用高手&#xff0c;比不上…

【电路笔记】-互感

互感 文章目录 互感1、概述2、互感3、耦合系数4、互感示例15、互感示例2 互感是一个线圈磁场与另一个线圈的相互作用&#xff0c;因为它在相邻线圈中感应出电压。 1、概述 互感是两个磁耦合线圈之间的电路参数&#xff0c;定义了一个线圈产生的时变磁通量被感应到相邻的第二个…

不懂快团团大团长对接?凭什么快团团的钱轮到你赚?

对接头部快团团大团长&#xff0c;让快团团大团长帮你卖货 分享几个推品的关键词&#xff1a; 1.推品的内容&#xff1a;产品实拍图核心卖点 不要上来就发笔记&#xff0c;你的产品图和文案还没吸引人&#xff0c;就发笔记没有人看。 可以先发你产品的简短卖点和图片&#xff…

pycharm deployment 灰色 一直无法点击

我的development的配置如下&#xff0c;我看了很多教程一直不知道为什么一直是灰色的&#xff0c; 文件夹配置&#xff1a; 如果你这里 Autodect&#xff0c;那么你Mapping 的文件夹应该是应该省略这个前缀的&#xff0c;例如我下面&#xff0c;我应该将本地文件夹映射到/home…

唐嫣、刘诗诗、杨幂齐聚春晚舞台,再现仙剑三美惊艳绝伦的魅力。

♥ 为方便您进行讨论和分享&#xff0c;同时也为能带给您不一样的参与感。请您在阅读本文之前&#xff0c;点击一下“关注”&#xff0c;非常感谢您的支持&#xff01; 文 |猴哥聊娱乐 编 辑|徐 婷 校 对|侯欢庭 近日&#xff0c;娱乐圈的目光将聚焦于三位璀璨的女星——唐嫣…

【C++】类与对象(四)——初始化列表|explicit关键字|static成员|友元|匿名对象

前言&#xff1a; 初始化列表&#xff0c;explicit关键字&#xff0c;static成员&#xff0c;友元&#xff0c;匿名对象 文章目录 一、构造函数的初始化列表1.1 构造函数体内赋值1.2 初始化列表 二、explicit关键字三、static成员四、友元4.1 友元函数4.2 友元类 五、内部类六、…

QT上位机:串口调试助手

前言 上位机的简单编写可以帮我们测试并完善平台&#xff0c;QT作为一款跨平台的GUI开发框架&#xff0c;提供了非常丰富的常用串口api。本文先从最简单的串口调试助手开始&#xff0c;编写平台软件的串口控制界面 工程配置 QT 串口通信基于QT的QSerialPort类&#xff0c;先在…

python_蓝桥杯刷题记录_笔记_全AC代码_入门5

前言 关于入门地刷题到现在就结束了。 题单目录 1.P1579 哥德巴赫猜想&#xff08;升级版&#xff09; 2.P1426 小鱼会有危险吗 1.P1579 哥德巴赫猜想&#xff08;升级版&#xff09; 一开始写的代码是三重循环&#xff0c;结果提交上去一堆地TLE&#xff0c;然后我就给减少…

六轴机器人奇异点

1 奇异点说明 有着6个自由度的KUKA机器人具有3个不同的奇点位置。即便在给定状态和步骤顺序的情况下,也无法通过逆向变换(将笛卡尔坐标转换成极坐标值)得出唯一数值时,即可认为是一个奇点位置。这种情况下,或者当最小的笛卡尔变化也能导致非常大的轴角度变化时,即为奇点位置…

如何使用C#调用LabVIEW算法

新建一个工程 这是必须的&#xff1b; 创建项目 项目 点击完成&#xff1b; 将项目另存为&#xff1b;方便后续的使用&#xff1b; 创建 一个测试VI 功能很简单&#xff0c;用的一个加法&#xff1b;将加数A&#xff0c;B设置为输入&#xff0c;和C设置为输出&#xff0c;…

燃油宝行业分析:前景广阔市场潜力巨大

燃油宝&#xff0c;是第三代汽油清净剂的一种俗称(也被称为&#xff0c;汽油清净剂或燃油添加剂)&#xff0c;其目的是解决电喷车型燃油系统的积碳问题&#xff0c;快速恢复发动机最佳工况。 燃油宝对于清洁燃油系统、改善喷油雾化和燃油的充分燃烧、降低排放确实有显著效果&am…

【PyQt】05-多线程

文章目录 前言一、什么是单线程、多线程二、代码现象示例多线程代码运行结果 总结 前言 文章开始还是解释一下&#xff0c;这是跟着王铭东老师学习的。 提示&#xff1a;以下是本篇文章正文内容&#xff0c;下面案例可供参考 一、什么是单线程、多线程 单线程 在Python中&am…

Leetcode第383场周赛

Leetcode第383场周赛 本人水平有限&#xff0c;只做前3道。 一、边界上的蚂蚁 边界上有一只蚂蚁&#xff0c;它有时向 左 走&#xff0c;有时向 右 走。 给你一个 非零 整数数组 nums 。蚂蚁会按顺序读取 nums 中的元素&#xff0c;从第一个元素开始直到结束。每一步&#…

百面嵌入式专栏(面试题)内存管理相关面试题1.0

沉淀、分享、成长,让自己和他人都能有所收获!😄 📢本篇我们将介绍内存管理相关面试题 。 一、内存管理相关面试题 page数据结构中的_refcount和_mapcount有什么区别?匿名页面和高速缓存页面有什么区别?page数据结构中有一个锁,我们称为页锁,请问trylock_page()和loc…

20240206三次握手四次挥手

TCP和UDP异同点 相同点&#xff1a;同属于传输层的协议 不同点&#xff1a; TCP ----> 稳定 1> 提供面向连接的&#xff0c;可靠的数据传输服务 2> 传输过程中&#xff0c;数据无误、数据无丢失、数据无失序、数据无重复 1、TCP会给每个数据包编上编号&#xff…

HGAME 2024 WEEK1 WP

文章目录 WEBezHTTPBypass itSelect Courses2048*16jhat REezASMezPYCezUPXezIDA PWNEzSignIn CRYPTO奇怪的图片ezRSAezMathezPRNG MISCSignIn来自星尘的问候simple_attack希儿希儿希尔签到 放假比较闲&#xff0c;打打比赛 WEB ezHTTP 来自vidar.club、UA要求阿巴阿巴阿巴…