rust - 为什么生命周期规则有利于字符串文字?
问题描述
此代码段无法编译,因为 structA
实例的寿命超过了s2
它在其 field 中保存的引用s
。没问题。
struct A<'a> {
s: &'a usize,
}
let s1 = 100;
let mut a = A { s: &s1 };
{
let s2 = 1000;
a.s = &s2;
}
在字符串文字的相同情况下,它可以编译。为什么?
struct A<'a> {
s: &'a str,
}
let s1 = "abc";
let mut a = A { s: &s1 };
{
let s2 = "abcd";
a.s = &s2;
}
解决方案
根据Rust 编程语言,所有字符串文字都有特殊的'static
生命周期。
所以在你的例子中,你有一个A<'static>
并且你正在改变&'static str
它所持有的。
推荐阅读
- css - TailwindCSS / Prettier 在 @apply 中添加空间
- python - Kaggle Python 课程练习:字符串和字典 Q. no. 2
- c++ - 在并行代码中调试分段错误
- android-emulator - 如何通过 Bluestacks 上的“adb 备份/恢复”确认解锁?
- shiny - 在选择 Advanced checkboxInput 时禁用/启用 selectInput 和 fileInput
- python - Python selenium 给了我一个空的文本字符串
- ruby-on-rails - Rails 6 API 仅不保存嵌套属性
- css - CSS 和外部参考样式表页面
- python - 抓取表,其中行需要与先前的元素相关联
- excel - 将单元格值与 VBA 组合