MST
星途 面试题库

面试题:Rust中解引用操作在函数参数传递中的应用

在Rust中,假设有一个函数`fn print_length(s: &str)`,现在有一个`String`类型的变量`s1 = String::from("hello")`。请阐述如何通过解引用操作将`s1`作为参数传递给`print_length`函数,并解释其中涉及的解引用原理。
14.7万 热度难度
编程语言Rust

知识考点

AI 面试

面试题答案

一键面试
  1. 传递方式: 可以这样调用函数:print_length(&s1 as &str); 或者 print_length(&*s1);

  2. 解引用原理

    • String类型实现了Deref trait,它可以被解引用为str类型。在Rust中,当使用&*s1时,*s1首先尝试将String类型的s1解引用为str类型(因为String实现了Deref trait指向str),然后再加上&取引用,这样就得到了&str类型,满足print_length函数参数的要求。而&s1 as &str这种方式是通过显式类型转换,将&String类型转换为&str类型,这也是利用了Stringstr的内在联系,同样满足函数参数要求。