Rust 数据类型使用注意点

news2024/11/18 7:28:24

文章目录

  • 前言
  • 一、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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

一个冷门的js加密逆向分析

先上加密代码供各位先看为敬 (function(){function j2f6c82(ve7deb){var i86905"VPfaI5H|Nc]$^rhn1B8dR.w/u-4!ZetJ?XFM2SY(&sbjlW6GEmAd[L0i,;yx%qozC9U_~g37OkKTpvQD:";var z1a52da8"4H_&|GNcEon:B2-?h]lx.(gkzOdA3eL,9;myV8bJwriRSt6sX75Fvu^p0Ij…

【GAMES101】Lecture 17 材质

目录 材质 漫反射 镜面反射 折射-Snell’s Law Fresnel Reflection / Term&#xff08;菲涅耳项&#xff09; 微表面模型 各向同性与各向异性 BRDF的性质 测量BRDF 材质 渲染方程中的BRDF描述了物体是如何与光线作用的&#xff0c;而物体的材质决定了它看起来是怎么样…

路桥施工污废水处理需要哪些工艺设备

在路桥施工过程中&#xff0c;污废水的处理成为一个重要的环节。合理选择和使用适当的工艺设备&#xff0c;不仅可以有效处理路桥施工污废水&#xff0c;减少对环境的影响&#xff0c;还能提高施工效率。下面介绍一些常用的路桥施工污废水处理工艺设备&#xff1a; 1. 预处理设…

分享65个节日PPT,总有一款适合您

分享65个节日PPT&#xff0c;总有一款适合您 65个节日PPT下载链接&#xff1a;https://pan.baidu.com/s/1hc1M5gfYK8eDxQVsK8O9xQ?pwd8888 提取码&#xff1a;8888 Python采集代码下载链接&#xff1a;采集代码.zip - 蓝奏云 学习知识费力气&#xff0c;收集整理更不易。知…

什么样的数据摆渡系统 是业务部门和IT部门同时需要的?

网络隔离技术已广泛应用于企业的网络建设中&#xff0c;网络隔离技术通过使用不同的协议&#xff0c;将两个或者两个以上可路由的网络通过不可路由的协议进行数据交换&#xff0c;从而达到隔离目的。这种技术可以有效地将有害的网络安全威胁隔离开&#xff0c;以保障数据信息在…

MySQL数据库练习【一】

MySQL数据库练习【一】 一、建库建表-数据准备二、习题2.1. 查询部门编号为30的部门的员工详细信息2.2.查询从事clerk工作的员工的编号、姓名以及其部门号2.3.查询奖金多于基本工资的员工的信息、查询奖金小于基本工资的员工的信息2.4.查询奖金多于基本工资60%的员工的信息2.5.…

Flink 动态表 (Dynamic Table) 解读

博主历时三年精心创作的《大数据平台架构与原型实现&#xff1a;数据中台建设实战》一书现已由知名IT图书品牌电子工业出版社博文视点出版发行&#xff0c;点击《重磅推荐&#xff1a;建大数据平台太难了&#xff01;给我发个工程原型吧&#xff01;》了解图书详情&#xff0c;…

编译原理与技术(二)——词法分析(一)正则表达式

一、词法分析的概貌 一个程序&#xff0c;在我们看来往往是像下图这样的。 实际上&#xff0c;上面的程序本质上就是一个字符串&#xff0c;所以&#xff0c;它等价于下面这样的。 上面的字符串&#xff08;字符流&#xff09; &#xff0c;就是编译器接收到的程序的形式。 所…

数据库管理-第145期 最强Oracle监控EMCC深入使用-02(20240205)

数据库管理145期 2024-02-05 数据库管理-第145期 最强Oracle监控EMCC深入使用-02&#xff08;20240205&#xff09;1 监控方式2 度量配置3 阻塞4 DG监控总结 数据库管理-第145期 最强Oracle监控EMCC深入使用-02&#xff08;20240205&#xff09; 作者&#xff1a;胖头鱼的鱼缸&…

lombok的使用

lombok的使用 Lombok如何使用&#xff1f;导入POM依赖即可使用示例 Lombok Lombok是一个可以帮助我们简化Java代码编写的工具类&#xff0c;通过注解的方式&#xff0c;可以消除代码中的构造方法、getter/setter等代码&#xff0c;使写的类更加简洁。 如何使用&#xff1f;导入…

769933-15-5,Biotin aniline,用来标记和检测细胞膜上的特定蛋白质

您好&#xff0c;欢迎来到新研之家 文章关键词&#xff1a;769933-15-5&#xff0c;Biotin aniline&#xff0c;生物素苯胺 一、基本信息 产品简介&#xff1a;Biotin aniline, also known as Biotin aniline, is a molecular probe with strong reactivity. Its uniqueness…

goland中快捷关键词forr、main等不生效的问题记录

平时用的较多的一些快捷关键词&#xff0c;如forr会提示range循环并通过回车可自动打出来&#xff0c;main会提示main函数并通过回车可自动打出来&#xff0c;这种快捷处理能极大的提高编码效率。 但由于之前更改了一些配置&#xff0c;可能有的被覆盖失效了&#xff0c;重新修…

vue+vite项目,动态导入静态资源的几种方式

博主的桌面工具软件已经正式开发&#xff0c;获取方式&#xff1a; 可以关注我的小程序【中二少年工具箱】获取。&#xff08;若小程序更新有延迟&#xff0c;可先收藏小程序&#xff09; 通过下载链接 百度网盘: 链接&#xff1a;https://pan.baidu.com/s/15zDnSoEzJGSZLjpD…

【安卓跨程序共享数据,探究ContentProvider】

ContentProvider主要用于在不同的应用程序之间实现数据共享的功能&#xff0c;它提供了一套完整的机制&#xff0c;允许一个程序访问另一个程序中的数据&#xff0c;同时还能保证被访问数据的安全性。 目前&#xff0c;使用ContentProvider是Android实现跨程序共享数据的标准方…

003集—三调数据库添加三大类字段——arcgis

在国土管理日常统计工作中经常需要用到三大类数据&#xff08;农用地、建设用地、未利用地&#xff09;&#xff0c;而三调数据库中无三大类字段&#xff0c;因此需要手工录入三大类字段&#xff0c;并根据二级地类代码录入相关三大类名称。本代码可一键录入海量三大类名称统计…

性能实测:分布式存储 ZBS 与集中式存储 HDS 在 Oracle 数据库场景表现如何

作者&#xff1a;深耕行业的 SmartX 金融团队 金鑫 在金融客户的基础架构环境中&#xff0c;HDS 是一种被广泛使用的存储解决方案。作为集中式存储的代表之一&#xff0c;HDS 拥有高性能、高可用性和可扩展性的企业级存储特点&#xff0c;适用于实时数据处理、虚拟化和灾难备份…

c++入门学习④——对象的初始化和清理

目录 对象的初始化和清理&#xff1a; why? 如何进行初始化和清理呢&#xff1f; 使用构造函数和析构函数​编辑 构造函数语法: 析构函数语法: 构造函数的分类&#xff1a; 两种分类方式&#xff1a; 三种调用方法&#xff1a; 括号法&#xff08;默认构造函数调用&…

thinkphp数据批量提交(群发消息)

<form id="edit-form" class="form-horizontal" role="form" data-toggle<

PHP实现DESede/ECB/PKCS5Padding加密算法兼容Java SHA1PRNG

这里写自定义目录标题 背景JAVA代码解决思路PHP解密 背景 公司PHP开发对接一个Java项目接口&#xff0c;接口返回数据有用DESede/ECB/PKCS5Padding加密&#xff0c;并且key也使用了SHA1PRNG加密了&#xff0c;网上找了各种办法都不能解密&#xff0c;耗了一两天的时间&#xf…

【Qt学习笔记】(三)常用控件(持续更新)

Qt 常用控件 1 控件概述2 QWidget 控件核心属性2.1 enabled2.2 geometry2.3 window frame 的影响2.4 windowTitle2.5 window Icon2.6 windowOpacity2.7 cursor2.8 font2.9 toolTip2.10 focusPolicy2.11 stylesheet 1 控件概述 Widget是Qt中的核心概念英文原义是"小部件&q…