MST

星途 面试题库

面试题:Rust泛型函数与类型约束基础

请编写一个Rust泛型函数,该函数接受两个相同类型的参数并返回它们的和。同时,要求这个函数只能接受实现了`std::ops::Add` trait的类型。请详细说明函数定义过程中类型参数和trait约束的作用。
48.5万 热度难度
编程语言Rust

知识考点

AI 面试

面试题答案

一键面试
fn add<T: std::ops::Add<Output = T>>(a: T, b: T) -> T {
    a + b
}

类型参数和trait约束的作用

  1. 类型参数 T
    • 它代表了一种抽象的数据类型。在函数定义 fn add<T>(a: T, b: T) -> T 中,T 作为函数的类型参数,可以在函数体中代表任意类型。这使得函数具有通用性,能够处理不同具体类型的数据,而不需要为每种类型都编写一个单独的函数。例如,T 可以是 i32f64 等。
  2. trait 约束 T: std::ops::Add<Output = T>
    • T: std::ops::Add 表示类型 T 必须实现 std::ops::Add trait。这个trait定义了加法操作 +。只有实现了这个trait的类型才能作为参数传递给 add 函数,因为函数体中使用了 a + b 操作。
    • <Output = T>std::ops::Add trait 中的一个关联类型约束。它确保 a + b 操作的结果类型与参数类型 T 相同。例如,如果 Ti32i32 实现 Add trait 时,其 Output 类型也是 i32,这样才能保证函数返回值类型与参数类型一致。如果没有这个约束,可能会出现加法操作结果类型与参数类型不匹配的情况,导致编译错误。