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 會拒絕這個函數簽名。