新闻详情

新闻详情

首页 / 资讯中心 / 详情

Rust编程语言:str和str

发布时间:2026/10/1 21:55:46来源:尧图网络
Rust编程语言:str和str
在 Rust 里你几乎从不会写str却天天在写str。这本身就很奇怪如果str是字符串类型为什么用的时候总要加个那个省掉行不行str和str是同一个东西的两种写法还是两个不同的类型这篇就把这两个类型讲清楚。先看下面的代码fn main() { let a abc; let _: () a; // 编译错误会显示 a 的类型 }猜猜a是什么类型我这里故意让编译器报错来查看变量a的类型这种查看变量类型的方法虽然不太方便但是最准确。这里变量a的类型是str。当我一开始看到这个结果时是有一点懵逼的以为会是 str 类型。Rust 是这样描述 str 的str - RustThestrtype, also called a ‘string slice’, is the most primitive string type. It is usually seen in its borrowed form,str. It is also the type of string literals,static str.str类型也叫字符串切片是最基础的字符串类型。它通常以借用形式str出现。它也是字符串字面量的类型即static str。在Rust中str被设计成Dynamically Sized Type中文叫动态大小类型也常叫unsized type不定长类型意思是这个类型的大小在编译期无法确定只有运行时才知道。而Rust编译器在给变量分配栈空间时必须知道大小。我使用类型注解强制告诉编译器我要 str 类型看看会发生什么fn main() { let a:str abc; }编译结果很有意思编译器这里报了两个错。第一个错误提示不匹配的类型。abc 这里是一个表达式表达式计算得出的结果的类型是str而等号左侧是str类型导致类型不匹配第二个错误提示str 类型的值的大小在编译期间未知。注意这是两个不同的错误为什么 Rust 要把 str 设计成DST呢其实很好理解Rust 用 str 表示一段字符串这个类型但是这个字符串的长度是未知的比如 abc, abcd, 234%1, 这些字符串类型但它们的长度是不同的。而 str 是一个指针类型它的大小固定为16字节64 位平台。fn main() { let a abcd; let b abcde; println!(size_of::str() {} 字节, size_of::str()); }由两个字段组成ptr指向那段 UTF-8 字节的第一个字节len那段数据的字节数不是字符数那 str 类型的值在哪里怎么好像从来没见过字符串字面量abc指向的那段数据在程序加载时被放在静态区只读数据段这段数据的类型是str。而字面量表达式abc本身的类型是static str——它是指向那段数据的引用。也就是数据abc三个字节→ 类型str在静态区表达式abc→ 类型static str求值得到指向数据的引用变量a→ 类型str存这个引用16 字节在栈上用一张图总结下另外str 类型是Rust中的 primitive type, 也就是原生类型而 str 属于Rust 引用类型下的一个具体类型并且结构由编译器内部实现。
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

流浪动物救助网站开发实战:Django+Vue前后端分离部署全记录 2026/10/1 22:53:31

流浪动物救助网站开发实战:Django+Vue前后端分离部署全记录

1. 项目概述与需求拆解1.1 为什么需要"流浪动物救助网站"十几张A4纸打印的领养信息、贴在小区门口的过期告示、微信公众号后台一条条人工记录的救助申请——这是我第一次去本地流浪动物救助站调研时看到的真实场景。志愿者很多,但信息散落,领养…

阅读更多 →
Steam游戏一直正在启动?六步逐层排查法定位卡启动根因 2026/10/1 22:53:30

Steam游戏一直正在启动?六步逐层排查法定位卡启动根因

1. 先搞清楚“卡启动”到底卡在哪一层Steam 游戏点下去之后一直显示“正在启动”,这个状态可以拖几秒,也可以拖到天荒地老。很多人第一反应是“Steam 又抽风了”,然后重启 Steam、重启电脑、重装游戏,一圈下来问题还在。我处理过不…

阅读更多 →
cpp-httplib 客户端自动跟随重定向(Follow Redirects)完整指南 2026/10/1 22:53:23

cpp-httplib 客户端自动跟随重定向(Follow Redirects)完整指南

后端网络 【免费下载链接】cpp-httplib A C header-only HTTP/HTTPS server and client library 项目地址: https://gitcode.com/GitHub_Trending/cp/cpp-httplib 点击查看 免费下载 cpp-httplib 作为一款 header-only 的 C HTTP/HTTPS 客户端与服务端库&#xff0…

阅读更多 →
从ECONNREFUSED到三层守护链:自托管网关自动自愈实战 2026/10/1 22:53:09

从ECONNREFUSED到三层守护链:自托管网关自动自愈实战

上个月某个凌晨,OpenClaw Gateway 的报警群突然热闹起来,日志文件里刷满了一行接一行的ECONNREFUSED。当时网关的健康检查已经连续失败三次,用户侧开始零星出现 502。我爬起来看日志,脑子里冒出来的第一个念头,跟很多人…

阅读更多 →
技术术语溯源方法论:破解Python/npm/Docker/OpenAI中的幽灵词 2026/10/1 22:53:09

技术术语溯源方法论:破解Python/npm/Docker/OpenAI中的幽灵词

1. 项目概述:Hindsight 不是“ hindsight”,而是一个被严重误读的开源协作工具 最近在多个技术社区刷到“hindsight”这个词,尤其高频出现在 Python、npm、Docker 和 OpenAI 相关讨论中——有人问“hindsight 怎么安装”,有人贴报…

阅读更多 →
DDD模式本质:语义防歧、结构防污、协作防耦 2026/10/1 22:53:01

DDD模式本质:语义防歧、结构防污、协作防耦

1. 什么是“DDD中的模式”:不是语法糖,而是领域建模的呼吸节奏很多人第一次看到“DDD中的模式”这个词,下意识会把它和“设计模式”划等号——单例、工厂、观察者……仿佛只要套上几个GoF经典结构,就能打出DDD的标签。但实际做项目…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉