fn add<T: Add<T,T>>(a: T, b: T) -> T{
a + b
}
fn main() {
println!("{}", add(10i,5));
}
我知道 Rust 不允许重载函数。
1.) add是在编译时生成的吗?
2.) 如果 1.) 为真,它是如何在不重载函数的情况下实现这一点的?
在我的脑海里,编译器会生成
fn add(a: i32, b: i32) -> i32{
a + b
}
fn add(a: f32, b: f32) -> f32{
a + b
}
最佳答案
通常函数重载意味着您自己可以定义具有相同名称但具有不同参数集的函数。由于 Rust 没有重载,它不会编译第二段代码。
然而,泛型可用于实现简单形式的重载 - 当“重载”函数具有完全相同的实现,但使用不同的类型时。
因此,您的两个观点都是正确的:add()
是 在编译时生成的,是的,您提供的片段正是编译器生成的内容(当然,函数名除外);只是重载与此无关。
关于rust - Rust 如何在没有重载函数的情况下设法拥有泛型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25460612/