TL; DR: bạn có thể nhận được &'static strtừ Stringmà bản thân nó có 'staticthời gian tồn tại.
Mặc dù các câu trả lời khác là đúng và hữu ích nhất, nhưng có một trường hợp cạnh (không hữu ích lắm), nơi bạn thực sự có thể chuyển đổi a Stringthành &'static str:
Thời gian tồn tại của tham chiếu phải luôn ngắn hơn hoặc bằng thời gian tồn tại của đối tượng được tham chiếu. Tức là đối tượng được tham chiếu phải tồn tại lâu hơn (hoặc bằng tuổi thọ) so với tham chiếu. Vì 'staticcó nghĩa là toàn bộ thời gian tồn tại của một chương trình, thời gian tồn tại lâu hơn không tồn tại. Nhưng một cuộc đời bình đẳng sẽ là đủ. Vì vậy, nếu một Stringcó thời gian tồn tại 'static, bạn có thể lấy &'static strtham chiếu từ nó.
Về mặt lý thuyết, việc tạo một statickiểu Stringđã trở nên khả thi với Rust 1.31 khi const fntính năng này được phát hành. Thật không may, hàm chỉ const trả lại một Stringlà String::new()hiện nay, và nó vẫn còn đằng sau một cửa tính năng (như vậy Rust đêm là cần thiết cho bây giờ).
Vì vậy, đoạn mã sau thực hiện chuyển đổi mong muốn (sử dụng hàng đêm) ... và thực sự không có giá trị sử dụng thực tế nào ngoại trừ việc hoàn toàn cho thấy rằng nó có thể xảy ra trong trường hợp cạnh này.
#![feature(const_string_new)]
static MY_STRING: String = String::new();
fn do_something(_: &'static str) {
}
fn main() {
do_something(&MY_STRING);
}
'staticthời gian tồn tại có nghĩa là chuỗi không bao giờ được phân bổ, tức là bị rò rỉ bộ nhớ. Tại sao bạn cần&'static strthay vì&'a strcho một số thích hợp'a?