What's the difference between placing “mut” before a variable name and after the “:”?

前端 未结 2 1884
孤独总比滥情好
孤独总比滥情好 2020-11-22 09:36

Here are two function signatures I saw in the Rust documentation:

fn modify_foo(mut foo: Box) { *foo += 1; *foo }
fn modify_foo(foo: &mut i32)         


        
2条回答
  •  时光取名叫无心
    2020-11-22 10:01

    If you're coming from C/C++, it might also be helpful to think of it basically like this:

    // Rust          C/C++
        a: &T     == const T* const a; // can't mutate either
    mut a: &T     == const T* a;       // can't mutate what is pointed to
        a: &mut T == T* const a;       // can't mutate pointer
    mut a: &mut T == T* a;             // can mutate both
    

    You'll notice that these are inverses of each other. C/C++ take a "blacklist" approach, where if you want something to be immutable you have to say so explicitly, while Rust takes a "whitelist" approach, where if you want something to be mutable you have to say so explicitly.

提交回复
热议问题