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

安徽免费网站制作网站的数据库做备份

安徽免费网站制作,网站的数据库做备份,网站服务器打不开,crm 在线试用这节课我们把字符串单独拿出来讲#xff0c;是因为字符串太常见了#xff0c;甚至有些应用的主要工作就是处理字符串。比如 Web 开发、解析器等。而 Rust 里的字符串内容相比于其他语言来说还要多一些。是否熟练掌握 Rust 的字符串的使用#xff0c;对 Rust 代码开发效率有很…这节课我们把字符串单独拿出来讲是因为字符串太常见了甚至有些应用的主要工作就是处理字符串。比如 Web 开发、解析器等。而 Rust 里的字符串内容相比于其他语言来说还要多一些。是否熟练掌握 Rust 的字符串的使用对 Rust 代码开发效率有很大影响所以这节课我们就来重点攻克它。 可怕的字符串 我们在 Rust 里常常会见到一些字符串相关的内容比如下面这些。 String, String, str, str, static str [u8], [u8], [u8; N], Vecu8 as_str(), as_bytes() OsStr, OsString Path, PathBuf CStr, CString首先我们来看 C 语言里的字符串。图里显示C 中的字符串统一叫做 char *这确实很简洁相当于是统一的抽象。但是这个统一的抽象也付出了代价就是丢失了很多额外的信息。 为什么会这样呢我们从计算机结构说起。我们都知道计算机 CPU 执行的指令都是二进制序列所有语言写的程序最后执行时都会归结为二进制序列来执行。但是为什么不直接写二进制打孔开发而是出现了几百上千种计算机语言呢没错就是因为抽象。 抽象是用来解决现实问题建模的工具。在 Rust 里也一样之所以 Rust 有那么多看上去都是字符串的类型就是因为 Rust 把字符串在各种场景下的使用给模型化、抽象化了。相比 C 语言的 char *多了建模的过程在这个模型里面多了很多额外的信息。 下面我们就来看看前面提到的那些字符串类型各自有什么具体含义。 不同类型的字符串 示例 fn main() {let s1: static str More Powerful,Choose Rust; let s2: String s1.to_string(); let s3: String s2;let s4: str s2[..];let s5: str s2[..6]; }上述示例中s1、s2、s3、s4、s5 看起来好像是 4 种不同类型的字符串表示。为了让你更容易理解我画出它们在内存中的结构图。 我来详细解释一下这张图片的意思。 “More Powerful,Choose Rust” 这个用双引号括起来的部分是字符串的字面量存放在静态数据区。而 s1 是指向静态数据区中的这个字符串的切片引用形式是 static str这是静态数据区中的字符串的表示方法。 通过执行 s1.to_string()Rust 将静态数据区中的字符串字面量拷贝了一份到堆内存中通过 s2 指向s2 具有这个堆内存字符串的所有权String 在 Rust 中就代表具有所有权的字符串。 s3 就是对 s2 的不可变引用因此类型为 String。 s4 是对 s2 的切片引用类型是 str。切片就是一块连续内存的某种视图它可以提取目标对象的全部或一部分。这里 s4 就是取的目标对象字符串的全部。 s5 是对 s2 的另一个切片引用类型也是 str。与 s4 不同的是s5 是 s2 的部分视图。具体来说就是 “I am a” 这一部分。 相信你通过上面的例子对这几种不同类型的字符串已经有了一个简单直观的认识了下面我来给你详细解释下。 String 是字符串的所有权形式常常在堆中分配。String 字符串的内容大小是可以动态变化的。而 str 是字符串的切片类型通常以切片引用 str 形式出现是字符串的视图的借用形式。 字符串字面量默认会存放在静态数据区里而静态数据区中的字符串总是贯穿程序运行的整个生命期直到程序结束的时候才会被释放。因此不需要某一个变量对其拥有所有权也没有哪个变量能够拥有这个字符串的所有权也就是这个资源的分配责任。因此对于字符串字面量这种数据类型我们只能拿到它的借用形式 static str。这里 static 表示这个引用可以贯穿整个程序的生命期直到这个程序运行结束。 String 仅仅是对 String 类型的字符串的普通引用。 对 String 做字符串切片操作后可以得到 str。这里这个 str 就是指向由 String 管理的内存资源的切片引用是目标字符串资源的借用形式不会再把字符串内容复制一份。 从上面的图示里可以看到str 既可以引用堆中的字符串也可以引用静态数据区中的字符串static str 是 str 的一种特殊形式。其实内存本来就是一个线性空间一个指针引用是指针的一种理论上来说可以指向这个线性空间中的任何地址。 str 也可转换为 String。你可以通过示例看一下它们之间是如何转换的。 let s: String “More Powerful,Choose Rust”.to_string(); let a_slice: str s[…]; let another_String: String a_slice.to_string(); 切片 上面提到了切片这里我再补充一点关于切片slice的背景知识。切片是一段连续内存的一个视图view在 Rust 中由 [T] 表示T 为元素类型。这个视图可以是这块连续内存的全部或一部分。切片一般通过切片的引用来访问你可以看一下我给出的这个字符串示例。 let s String::from(“abcdefg”); let s1 s[…]; // s1 内容是 “abcdefg” let s2 s[0…4]; // s2 内容是 “abcd” let s3 s[2…5]; // s3 内容是 “cde” 上面示例中s 是堆内存中所有权型字符串类型。s1 作为 s 的一个切片引用它也指向堆内存中那个字符串的头部表示 s 的完整内容。s2 与 s1 指向的堆内存地址是相同的但是内容不同s2 是 “abcd”而 s1 是 “abcdefg”。s3 则是 s 的中间位置的一段切片引用内容是 “cde”。s3 指向的地址与 s、s1、s2 不同。 我画了一张图来表示它们之间的关系。
http://www.zqtcl.cn/news/928526/

相关文章:

  • 站长工具官网查询视频网站建设工具
  • 建设彩票网站制作网站服务器
  • 购物网站建设网站怎么购买国外的域名
  • 在线网站排名工具跨境电商卖什么产品最赚钱
  • 电商网页设计网站什么是网络营销产生的现实基础
  • 网站开发需要注意的阿里云做网站可以免备案吗
  • 网站开发后端菜鸟教程本地安装wordpress nginx
  • 网站做端口映射域名怎么做网站
  • 港口建设征收 申报网站网站内容建设与管理
  • 长沙企业网站建设较好的公司个人社保缴费比例
  • 网站备案信息页面惠安网站建设报价
  • 东莞做微网站建设十大免费软件下载
  • 做的很好的黑白网站成都小程序开发
  • 发布做任务网站wordpress新建用户
  • 郑州市东区建设环保局官方网站工作简历模板免费下载
  • 虾皮跨境电商网站公司网站建设费计入什么费用
  • 东光有做网站的吗公司装修图片大全
  • 一个域名下多个网站项目网手游
  • 网站建设竞价托管服务wordpress搬站流程
  • 做视频网站视频文件都存放在哪室内设计网站平台
  • 外贸网站建设网合肥网站设计公
  • 网站建设设计制作 熊掌号一键生成小程序商城
  • 北滘做网站企业展厅 设计 公司 平安
  • 网站做seo外链常州营销型网站建设
  • 乐清门户网站建设网络推广关键词优化公司
  • 自己做的网站被攻击了企业展厅方案设计公司
  • 可信赖的郑州网站建设公司网站怎样实名认证
  • 创建一个网站的步骤是中国机械加工网招聘信息
  • 做电影解析网站烟台网站建设外贸
  • 做网站 网上接单汽车网站开发流程