我遇到了一个生命周期错误,我无法解释为什么它是由编译器发出的。我需要这个(效果很好):
fn iter<'a>() -> impl Iterator<Item = &'a f64> {
[3.14].iter()
}
但是,当我尝试使用从特定字节表示转换而来的浮点值时from_bits
,如下所示:
fn iter<'a>() -> impl Iterator<Item = &'a f64> {
[f64::from_bits(0x7fffffffffffffff)].iter()
}
它给了我“创建一个临时的,在使用中被释放”。这里的游乐场(稳定的 1.45.2)。
我的理由是,因为f64
isCopy
类型(如果我使用常量值,它确实可以按预期工作),这应该可以工作,因为不应该对该值执行释放。
所以问题是为什么编译器会在第二种情况下发出错误?
感谢您的任何指示和解释!
PS 我需要迭代器而不是引用,因为它非常适合我的其他 API。