MST

星途 面试题库

面试题:Rust中隐式类型转换的常见场景

请举例说明Rust语言中至少两种隐式类型转换会发生的常见场景,并分析在这些场景下隐式转换规则是如何应用的。
41.3万 热度难度
编程语言Rust

知识考点

AI 面试

面试题答案

一键面试

场景一:函数参数类型匹配

  1. 场景举例:假设有一个函数add_numbers,它接受两个i32类型的参数并返回它们的和。如果调用这个函数时,传入的是两个i16类型的值,Rust会进行隐式类型转换。
fn add_numbers(a: i32, b: i32) -> i32 {
    a + b
}

fn main() {
    let num1: i16 = 5;
    let num2: i16 = 3;
    let result = add_numbers(num1 as i32, num2 as i32);
    // 如果不手动转换,Rust会自动将i16隐式转换为i32(在支持这种隐式转换的情况下)
    let result_auto = add_numbers(num1, num2); 
}
  1. 转换规则:在Rust中,当小整数类型(如i16)作为参数传递给期望大整数类型(如i32)的函数时,会进行隐式的零扩展(对于无符号整数)或符号扩展(对于有符号整数)。因为i16的取值范围完全包含在i32的取值范围内,所以这种转换是安全的,Rust会自动进行。

场景二:算术运算中的类型统一

  1. 场景举例:在进行算术运算时,如果操作数类型不同,Rust会隐式地将它们转换为同一种类型。例如,将i32类型和i64类型的数相加。
fn main() {
    let num1: i32 = 10;
    let num2: i64 = 20;
    let sum = num1 + num2; 
}
  1. 转换规则:Rust会将较小类型(i32)隐式转换为较大类型(i64)。转换规则遵循“向大类型转换”的原则,以避免数据丢失。在这种情况下,i32类型的num1会通过符号扩展转换为i64类型,然后再进行加法运算。