做网站的广告词,工商营业执照注册查询官网,网站建设运营思路,游戏自助充值网站怎么做Rust 第17节 生命周期
先看一段错误代码
/*
//一段错误的代码
// Rust 编译时会报错#xff1b;
*/let r;{let x 5;r x;}println!({},r);Rust 在编译时使用 借用检查器#xff0c; 比较作用域来检查所有的借用是否合法#xff1b; 很明显#xff1b;r…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 logesta(x : a str,y : a str) - a str {if x.len() y.len() {x} else {y }
}上边的方式为生命周期标注 生命周期的标注不会改变引用的生命周期长度 当指定了泛型生命周期参数函数可以接收带有任何生命周期的引用 它的本质是描述多个引用的生命周期间的关系但不影响生命周期
标注语法
生命周期标注语法 以 ’ 开头全小写很短通常都使用 a 在 后边用空格与类型分开 上边例子中的’a 就是 x,y中较小的那个
结构体中的生命周期标注
// 当结构体的成员有引用时就需要存在标注struct Importa {part : a str,
}//这里表示 part的生命周期要和结构体一样长生命周期标注省略
任何引用都需要标注生命周期
有的标注编译器可以完成所以不需要标注 编译器通过三个方法来判断引用的生命周期这三个方法的情况下可以省略生命周期标注 适用于 fn 和 impl
应用于输入生命周期函数的传参 每个引用类型的参数都有自己的生命周期应用于输出生命周期 函数的返回值 如果只有一个输入生命周期参数那么该生命周期都将赋给所有的输出生命周期参数应用于输出生命周期 函数的返回值 如果有多个输入参数生命周期参数但其中一个是 self 或 mut self 那么self 的生命周期将赋给所有的输出生命周期参数
静态生命周期
static 是一个特殊的生命周期表示的是 整个程序的持续时间。