见下面的例子
rustc 1.5.0 (3d7cd77e4 2015-12-04)
这可以编译。 如果我评论案例1并取消注释案例2.我收到了错误
E_STRICT
为什么呢?这是一个错误吗? 我正在使用rustc 1.5.0
phpinfo()
答案 0 :(得分:4)
我认为这不是一个错误。请注意,它也会在没有函数指针的情况下产生相同的错误。
// this compiles
let a: &i32 = &3;
vs
let a: &i32;
a = &3;
//^ error: borrowed value does not live long enough
上面的两段代码不相同。生命周期从绑定变量(let a: &32
)的位置开始,而不是在您为其指定的位置(a = &3
)。如果您将两者分开,就像在第二种情况下一样,您说& i32的生命周期应该从let a: &i32
行开始,编译器无法在此保证一般情况。
例如,假如你做了:
// does not compile
let a: &i32;
{
let b = 3;
a = &b;
} // b is out of scope, so a can't still contain a live reference here
你可以使这个工作,但你明确需要告诉编译器b是静态的(静态生命周期比所有东西都要长),如下所示:
let a: &i32;
static b: i32 = 3;
a = &b;
或(在您原来的情况下):
let myFunctor: &Fn(i32) -> i32;
static F: fn(i32) -> i32 = fx;
myFunctor= &F;
答案 1 :(得分:1)
是否可以与const
vs static
相关联?
static i:usize = 0usize;
fn test_Functor()
{
// case 2. Assignment
let myFunctor: &usize;
myFunctor= &i ;
}
它在i
为static
时进行编译,但在const
时进行编译。
从book开始,据说静态不是内联的......