0

我偶然发现了这个有趣的代码示例

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. 这个对吗?对于我更喜欢​​减少编译时间而不是提高性能的情况,是否应该使用一个成语?

4

0 回答 0