首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

1.4 来看看rust有哪些数据类型

上一讲我们介绍了堆和栈,从main()函数运行时开始说起堆栈地调用。同时也知道了堆栈上分别放那种数据(栈存的值是肯定在编译期就确定大小的,静态的,生命周期固定的;而堆上储存的数据一般是动态、大小不固定和生命周期不固定的)和他们的特点,从这节开始我们要进入rust语言的基础知识了。

首先是数据类型,rust是强类型语言,在编译期就得知道每个数据是哪种类型,使用严格编译来避免内存错误等等。可能习惯弱类型语言的开发者对此会很不适应~~。rust还提供了类型推导,即不用在每个变量后都写明其类型,编译器也可以自动推导其类型,类似于C++的auto。

但是请注意:这不是说可以不用管他的类型,只是写法上可以简洁点而已(编译时期的类型推导和python之类的运行时确定变量类型是不一样的)。还有人可能会觉得这种写法影响到可读性和可维护性,但我们程序员是干啥的??有痛点就会有需求~~有人已经做了称手的工具了:“rust-analyzer”插件(没错,就是1.2小节推荐的vs code插件)就可以提示你这是什么类型,就像下图:

由图还可注意的是:有些语言使用“let”修饰不可变的变量,“var”修饰可变的变量,而rust使用“let“修饰变量,默认是不可变的(符合最小权限原则),可以使用"mut"修饰让其可变。

好了,下面正式进入主题~~  rust可以分为标量类型和复合类型两种来介绍:

l标量类型:

n布尔类型(Boolean),使用true和false表示真假~~

n整型(Integer),Rust中的整型有很多种,比如i8、i16、i32、i64、u8、u16、u32、u64等等,它们分别代表有符号和无符号的8位、16位、32位、64位整型。除此之外还有和系统(32位、64位)相关的isize和usize。

Rust 的整型字面量:

n浮点型(Float),只有f32和f64两种(没有double哈!!),分别代表32位和64位的浮点型。默认浮点类型是 f64,因为在现代的 CPU 中它的速度与 f32 的几乎相同,但精度更高。所有浮点型都是有符号的。

n 字符类型(Character),Rust中的字符类型只有一种,就是char。我们声明的 char 字面量采用单引号括起来,这与字符串字面量不同,字符串字面量是用双引号括起来。Rust 的字符类型大小为 4 个字节,表示的是一个 Unicode 标量值,这意味着它可以表示的远远不止是 ASCII。

n字符串类型(String),Rust中的字符串类型有两种,一种是&str字面量,另一种是String。&str是一个不可变的(immutable)字符串类型,而String是一个可变的(mutable)字符串类型。与C++ 20标准不同的是,Rust中的字符串类型可以使用UTF-8编码,而C++ 20标准只支持ASCII编码。

l复合类型

复合类型(compound type)可以将多个值组合成一个类型。Rust 有两种基本的复合类型:元组(tuple)和数组(array)。

n数组类型(Array),Rust中的数组类型是不可变的(immutable),也就是说,一旦声明了一个数组类型的变量,它的长度和元素值就不能再改变了,数组是可以在栈上分配的已知固定大小的单个内存块,可以回顾下我们1.3节的知识。

对于每个元素都相同的情况,还可以通过指定初始值、后跟分号和方括号中的数组长度来初始化数组,如下所示:

变量名为 a 的数组将包含 5 个元素,这些元素的值初始化为 3。这种写法与 let a = [3, 3, 3, 3, 3]; 效果相同,但更简洁。

n元组类型,元组是将多种类型的多个值组合到一个复合类型中的一种基本方式。元组的长度是固定的:声明后,它们就无法增长或缩小。通过在小括号内写入以逗号分隔的值列表来创建一个元组,元组中的每个位置都有一个类型,并且元组中不同值的类型不要求是相同的。

和大多数编程语言一样,元组中的第一个索引为 0。没有任何值的元组 () 是一种特殊的类型,只有一个值,也写成 ()。该类型被称为单元类型(unit type),该值被称为单元值(unit value)。如果表达式不返回任何其他值,就隐式地返回单元值

好了,我们今天啰嗦了一下和数据结构有关的东西,然后快速地过了一遍rust基本数据类型和一些tips,大家有空的时候可以多练练手,培养下感情 :D 。对于今天的内容你有什么看法呢?欢迎在评论区留言讨论!如果觉得文章有用,记得点赞关注加收藏,以后就会第一时间收到文章推送啦 :D

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20230205A06QN800?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券