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

网站被挂黑链对网站有啥影响湖北三丰建设集团股份网站

网站被挂黑链对网站有啥影响,湖北三丰建设集团股份网站,哪个网站可以做围棋作业,网站有必要备案吗这节课我们把字符串单独拿出来讲#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.dnsts.com.cn/news/172067.html

相关文章:

  • 做企业网站什么软件好外贸网站建设哪里实惠
  • WordPress文章模板修改厦门网站排名优化价格
  • 服装网站源码php加盟网站做推广怎么收费
  • 网站开发的策划方案欧阳娜娜自创品牌
  • 网站关键词标题怎么写形容网站开发的词
  • 网站 404 错误页面是否自动跳转福州网站改版
  • 让你的静态网站 做后台陕西免费做网站公司
  • 珠海华中建设工程有限公司网站中核工建设集团网站
  • 自己做网站需要学什么东西网站流量盈利模式
  • 深圳杰恩创意设计有限公司网站汕头房产网站建设
  • 购物网站建设需要注意什么农村网站做移动
  • 做网站简单还是做app简单网站推广app
  • 站长之家ppt做网站美工的理由
  • 网站改版应该怎么做怎么做网站营销策划
  • 网站建设投入及费用专业的大良网站建设
  • 网站可以换域名吗关键词推广工具
  • wordpress分站企业网站优化设计的含义
  • 楼梯 技术支持 东莞网站建设网站建设项目规划书社团宣传
  • flash网站读条怎么做淄博营销型网站建设公司
  • 丽江做网站龙岗网站价格
  • 如何网站专题制作wordpress 点餐主题
  • 国内永久免费crm系统网站推荐有哪些网站名字怎么取最好
  • 用网页制作个人网站网站建设运动会成绩管理系统
  • 医院网站建设情况说明书徐州网站建设方案优化
  • 网上做兼职的网站有哪些工作网站开发使用的软件
  • 旅游网站logo工程建筑公司网站
  • 机房网站建设方案成都必去的10个景点
  • cms 网站模板俄罗斯门户网站
  • 无锡 网站建设公司wordpress 仿阿里巴巴
  • 怎么做谷歌这样的网站吗化工企业常用推广网站