'static as a function constraint是什么意思?

时间:2015-05-28 07:26:28

标签: rust lifetime

此上下文中static的含义是什么?

fn foo<F: Human + 'static>(param: F) {}

fn main() {
    let kate = Kate { age: 30 };
    foo(kate);
}

我理解标记global_variable static类似于静态意味着,即。在c#中,变量的空间分配在内存的一个单独的段中,存在于整个程序的执行中。

static global_variable: i32 = 5;

但我不明白给出'静态约束意味着什么。 kate是否以某种方式得到提升,她的生命延长了,所以它现在也适用于整个程序的执行?

或者它只是意味着一旦foo停止使用它就会被解除分配?

1 个答案:

答案 0 :(得分:10)

设置T: 'a之类的约束意味着类型T的所有生命周期参数必须满足生命周期约束'a(因此,必须比它长)。

例如,如果我有这个结构:

struct Kate<'a, 'b> {
    address: &'a str,
    lastname: &'b str
}
仅当Kate<'a, 'b> F: Human + 'static时,

'a == 'static才会满足约束'b == 'static

但是,没有任何生命周期参数的结构将始终满足任何生命周期约束。

总而言之,像F: 'static这样的约束意味着:

  • F没有生命周期参数
  • F的所有生命周期参数均为'static