Rust 生命周期

Rust 第17节 生命周期

先看一段错误代码

/*
//一段错误的代码
// Rust 编译时会报错;
*/let r;{let x = 5;r = &x;}println!("{}",r);

Rust 在编译时使用 借用检查器, 比较作用域来检查所有的借用是否合法;
很明显;r 引用了 x; 但是x 的生命周期比r短;所以就有问题;

再看下一段代码

fn logest(x : &str,y : &str) -> &str {if x.len() > y.len() {x} else {y        }
}

看着没有问题,但是编译器会报错;是由于,输入的两个引用,和输出的一个引用;这么多引用,编译器不知道他们的生命周期的关系;所以报错;

生命周期标注

解决方法:
手动标注生命周期

//需要手动指示生命周期; 简单理解就是返回值的生命周期和传入的参数周期一致,都是'a
fn logest<'a>(x : & 'a str,y : &'a str) -> & 'a str {if x.len() > y.len() {x} else {y        }
}

上边的方式为生命周期标注
生命周期的标注不会改变引用的生命周期长度
当指定了泛型生命周期参数,函数可以接收带有任何生命周期的引用
它的本质是描述多个引用的生命周期间的关系,但不影响生命周期

标注语法

生命周期标注语法
以 ’ 开头,全小写,很短;通常都使用 'a
在 & 后边,用空格与类型分开
上边例子中的’a 就是 x,y中较小的那个

结构体中的生命周期标注

// 当结构体的成员有引用时,就需要存在标注struct  Import<'a> {part : & 'a str,
}//这里表示 part的生命周期要和结构体一样长;

生命周期标注省略

任何引用都需要标注生命周期

有的标注编译器可以完成,所以不需要标注;
编译器通过三个方法来判断引用的生命周期,这三个方法的情况下,可以省略生命周期标注
适用于 fn 和 impl

  1. 应用于输入生命周期;(函数的传参)
    每个引用类型的参数都有自己的生命周期
  2. 应用于输出生命周期 (函数的返回值)
    如果只有一个输入生命周期参数,那么该生命周期都将赋给所有的输出生命周期参数
  3. 应用于输出生命周期 (函数的返回值)
    如果有多个输入参数生命周期参数,但其中一个是 &self 或 & mut self ;那么self 的生命周期将赋给所有的输出生命周期参数

静态生命周期

'static 是一个特殊的生命周期,表示的是 整个程序的持续时间。

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

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

相关文章

jq之animate() toggle

<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>jq之demo</title><!--线上jq库--><script src"https://code.jquery.com/jquery-3.4.1.min.js"></script><scrip…

C语言 __FILE__ - C语言零基础入门教程

目录 一.__FILE__简介二.__FILE__实战三.猜你喜欢 零基础 C/C 学习路线推荐 : C/C 学习目录 >> C 语言基础入门 一.**__FILE**__简介 ANSI C 定义了许多宏。在编程中您可以使用这些宏&#xff0c;但是不能直接修改这些预定义的宏。 __DATE__ 当前日期&#xff0c;一个以…

Kafka精华问答 | kafka的使用场景是什么?

戳蓝字“CSDN云计算”关注我们哦&#xff01;Kafka是由Apache软件基金会开发的一个开源流处理平台&#xff0c;由Scala和Java编写。作为一种高吞吐量的分布式发布订阅消息系统&#xff0c;有着诸多特性。今天&#xff0c;就让我们一起来看看关于它的精华问答吧&#xff01;1Q&a…

jq之animate()操作多个属性

<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>jq之demo</title><!--线上jq库--><script src"https://code.jquery.com/jquery-3.4.1.min.js"></script><scrip…

C语言 __DATE__ - C语言零基础入门教程

目录 一.__DATE__简介二.__DATE__实战三.猜你喜欢 零基础 C/C 学习路线推荐 : C/C 学习目录 >> C 语言基础入门 一.__DATE__简介 ANSI C 定义了许多宏。在编程中您可以使用这些宏&#xff0c;但是不能直接修改这些预定义的宏。 __DATE__ 当前日期&#xff0c;一个以 “…

要闻君说:微软拿下五角大楼超大云服务订单!恒大玩儿起了充电桩and新能源汽车?苹果公司要放弃自动驾驶业务?...

关注并标星星CSDN云计算每周三次&#xff0c;打卡即read更快、更全了解泛云圈精彩newsgo go go 嗨&#xff0c;大家好&#xff01;偶是要闻君。新年说着说着就要到啦&#xff0c;在逐渐缩短的工作日中&#xff0c;我们还是继续哼着歌儿look look新闻吧&#xff01;文/要闻君“过…

jq之slideToggle

<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>jq之demo</title><!--线上jq库--><script src"https://code.jquery.com/jquery-3.4.1.min.js"></script><scrip…

C语言 __TIME__ - C语言零基础入门教程

目录 一.__TIME__简介二.__TIME__实战三.猜你喜欢 零基础 C/C 学习路线推荐 : C/C 学习目录 >> C 语言基础入门 一.__TIME__简介 ANSI C 定义了许多宏。在编程中您可以使用这些宏&#xff0c;但是不能直接修改这些预定义的宏。 __DATE__ 当前日期&#xff0c;一个以 “…

云漫圈 | 有趣的海盗问题 (完整版)

戳蓝字“CSDN云计算”关注我们哦&#xff01;作者&#xff1a;小灰来源&#xff1a;程序员小灰小灰发布的关于海盗问题的漫画&#xff0c;得到了大家的热烈讨论&#xff0c;很感谢大家的支持。这一次&#xff0c;小灰做了如下更新&#xff1a;1.修正了小灰面试阶段的一个数字错…

jq之slideup()

<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>jq之demo</title><!--线上jq库--><script src"https://code.jquery.com/jquery-3.4.1.min.js"></script><scrip…

C语言 __FUNCTION__ - C语言零基础入门教程

目录 一.__FUNCTION__简介二.__FUNCTION__实战三.猜你喜欢 零基础 C/C 学习路线推荐 : C/C 学习目录 >> C 语言基础入门 一.__FUNCTION__简介 ANSI C 定义了许多宏。在编程中您可以使用这些宏&#xff0c;但是不能直接修改这些预定义的宏。 __DATE__ 当前日期&#xff…

jq之slidedown()

<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>jq之demo</title><!--线上jq库--><script src"https://code.jquery.com/jquery-3.4.1.min.js"></script><scrip…

请重视!服务器这几个“异常”可能性预警

戳蓝字“CSDN云计算”关注我们哦&#xff01;原文&#xff1a;https://mp.weixin.qq.com/s/qAkoG-Hut9Tfd9tOFRwafg提到服务器宕机检测&#xff0c;大家会想到&#xff0c;宕机能够很快知道&#xff0c;这个有什么可做的?实际上&#xff0c;很多时候服务器宕机&#xff0c;并不…

jq之fadeTo

<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>jq之demo</title><!--线上jq库--><script src"https://code.jquery.com/jquery-3.4.1.min.js"></script><scrip…

C语言 extern “C” - C语言零基础入门教程

目录 一.__cplusplus 简介二.__cplusplus 使用三.猜你喜欢 零基础 C/C 学习路线推荐 : C/C 学习目录 >> C 语言基础入门 一.__cplusplus 简介 __cplusplus 和 extern “C” 一般都是配对使用&#xff0c;我们在阅读程序时&#xff0c;经常会见到__cplusplus 关键字&…

趣挨踢 | 那些出现在电影或电视剧中的精彩代码,你认出来几个?

戳蓝字“CSDN云计算”关注我们哦&#xff01;程序员最幽默&#xff08;ID&#xff1a;humor1024&#xff09;编译链接&#xff1a;https://moviecode.tumblr.com/一些比较良心的电视和电影中会把代码这些细节做到机制&#xff0c;就算是屏幕上一闪而过&#xff0c;也都有理有据…

jq之fadeOut()

<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>jq之demo</title><!--线上jq库--><script src"https://code.jquery.com/jquery-3.4.1.min.js"></script><scrip…

C语言 #运算符 - C语言零基础入门教程

目录 一.#运算符简介二.#运算符使用三.猜你喜欢 零基础 C/C 学习路线推荐 : C/C 学习目录 >> C 语言基础入门 一.#运算符简介 在 C 语言关于 define 的文章中我们有介绍到&#xff1a;凡是以 # 开头的均为预处理指令&#xff0c;预处理又叫预编译。预编译不是编译&…

C语言 __cplusplus - C语言零基础入门教程

目录 一.__cplusplus 简介二.__cplusplus 使用三.猜你喜欢 零基础 C/C 学习路线推荐 : C/C 学习目录 >> C 语言基础入门 一.__cplusplus 简介 __cplusplus 和 extern “C” 一般都是配对使用&#xff0c;我们在阅读程序时&#xff0c;经常会见到__cplusplus 关键字&…

jq之fadeIn()

<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>jq之demo</title><!--线上jq库--><script src"https://code.jquery.com/jquery-3.4.1.min.js"></script><scrip…