我偶然发现了这个有趣的代码示例:
trait Bar {
fn foo(&mut self);
fn call_foo_twice(&mut self) {
self.foo(); // <-- this is statically dispatched
self.foo();
}
}
在 C++ 中,如果这是一个基类而不是 trait,call_foo_twice
则只会编译一次,但它会动态调度对 的调用foo
,它本身将被声明为虚拟的。
如果这些foo
调用是在 Rust 中静态分派的,这表明call_foo_twice
将为实现的每个类型重新编译,Bar
因为每个类型都有自己唯一的foo
. 这个对吗?对于我更喜欢减少编译时间而不是提高性能的情况,是否应该使用一个成语?