我知道特征和切片是未分级的,即在编译时不可能知道它们的大小,例如任何类型都可以实现特征,但是该类型可能没有大小.
不过,这个示例代码是不是意味着每个实现特征的类型都Foo需要实现Sized呢?
trait Foo: Sized {}
struct Bar(i64);
impl Foo for Bar {}
Run Code Online (Sandbox Code Playgroud)
如果是这样,为什么这不起作用?
impl From<Foo> for Bar {
fn from(foo: Foo) -> Bar {
Bar(64)
}
}
Run Code Online (Sandbox Code Playgroud)
error[E0277]: the trait bound `Foo + 'static: std::marker::Sized` is not satisfied
--> src/main.rs:7:6
|
7 | impl From<Foo> for Bar {
| ^^^^^^^^^ `Foo + 'static` does not have a constant size known at compile-time
|
= help: the trait `std::marker::Sized` is not implemented for `Foo + 'static` …Run Code Online (Sandbox Code Playgroud) 在这种情况下,静态是什么意思?
fn foo<F: Human + 'static>(param: F) {}
fn main() {
let kate = Kate { age: 30 };
foo(kate);
}
Run Code Online (Sandbox Code Playgroud)
我理解标记global_variable static类似于静态意味着即.在c#中,变量的空间分配在内存的单独段中,存在于程序的整个执行中.
static global_variable: i32 = 5;
Run Code Online (Sandbox Code Playgroud)
但是我不明白给出"静态约束"意味着什么.被kate莫名其妙地促进和她的一生延长,因此现在住的程序太的整体执行力?
或者它只是意味着一旦foo停止使用它就会被解除分配?