Rust 学习笔记:关于生命周期的练习题
Rust 学习笔记:关于生命周期的练习题
- Rust 学习笔记:关于生命周期的练习题
- 生命周期旨在防止哪种编程错误?
- 以下代码能否通过编译?若能,输出是?
- 如果一个引用的生命周期是 'static,这意味着什么?
- 考虑以下函数签名,Rust 会接受吗?如果接收,请补全其生命周期。
- 考虑以下函数签名,Rust 会接受吗?如果接收,请补全其生命周期。
Rust 学习笔记:关于生命周期的练习题
参考视频:
- https://www.bilibili.com/video/BV1brrGYZENQ
生命周期旨在防止哪种编程错误?
A. 超出数组边界进行索引(缓冲区溢出)
B. 为对象分配的内存不足
C. 在对象的内存被释放后仍然使用其引用
D. 在检查可能的错误之前使用可能失败的计算结果
答:C。
以下代码能否通过编译?若能,输出是?
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 会接受吗?如果接收,请补全其生命周期。
struct Foo<'a> {bar: &'a i32
}fn baz(f: Foo) -> &i32 { /* ... */ }
答:Rust 会接受这个函数签名。
fn baz<'a>(f: Foo<'a>) -> &'a i32
考虑以下函数签名,Rust 会接受吗?如果接收,请补全其生命周期。
struct Foo<'a> {bar: &'a i32
}fn baz(f: &Foo) -> &i32 { /* ... */ }
答:Rust 会拒绝这个函数签名。