Rust 学习笔记:关于生命周期的练习题
- [Rust 学习笔记:关于生命周期的练习题](#Rust 学习笔记:关于生命周期的练习题)
-
- 生命周期旨在防止哪种编程错误?
- 以下代码能否通过编译?若能,输出是?
- [如果一个引用的生命周期是 'static,这意味着什么?](#如果一个引用的生命周期是 'static,这意味着什么?)
- [考虑以下函数签名,Rust 会接受吗?如果接收,请补全其生命周期。](#考虑以下函数签名,Rust 会接受吗?如果接收,请补全其生命周期。)
- [考虑以下函数签名,Rust 会接受吗?如果接收,请补全其生命周期。](#考虑以下函数签名,Rust 会接受吗?如果接收,请补全其生命周期。)
Rust 学习笔记:关于生命周期的练习题
参考视频:
生命周期旨在防止哪种编程错误?
A. 超出数组边界进行索引(缓冲区溢出)
B. 为对象分配的内存不足
C. 在对象的内存被释放后仍然使用其引用
D. 在检查可能的错误之前使用可能失败的计算结果
答:C。
以下代码能否通过编译?若能,输出是?
rust
fn shortest<'a, 'b>(x: &'a str, y: &'b str) -> &'a str {
if x.len() < y.len() { x } else { y }
}
fn main() {
println!("{}", shortest("hello", "rust"));
}
答:不能通过编译。

如果一个引用的生命周期是 'static,这意味着什么?
A. 引用所指向的数据不是动态的
B. 引用所指向的数据永远不会被释放
C. 引用所指向的数据不能被修改
D. 引用所指向的数据位于内存的静态区域
答:A。
考虑以下函数签名,Rust 会接受吗?如果接收,请补全其生命周期。
rust
struct Foo<'a> {
bar: &'a i32
}
fn baz(f: Foo) -> &i32 { /* ... */ }
答:Rust 会接受这个函数签名。
rust
fn baz<'a>(f: Foo<'a>) -> &'a i32
考虑以下函数签名,Rust 会接受吗?如果接收,请补全其生命周期。
rust
struct Foo<'a> {
bar: &'a i32
}
fn baz(f: &Foo) -> &i32 { /* ... */ }
答:Rust 会拒绝这个函数签名。