← Rust

LESSON / MIXED

参照と借用

&と&mutによる参照と借用の仕組み、借用規則を学び、所有権を移動せずに値を扱う方法を身につけます。

参照(reference)とは

前章では、関数に値を渡すと所有権が移動してしまうことを見ました。所有権を渡さずに値を一時的に使わせてもらう仕組みが「参照(reference)」です。参照を使うことを「借用(borrowing)」と呼びます。

fn calculate_length(s: &String) -> usize {
    s.len()
} // sはただの参照なので、ここで何かが破棄されることはない

fn main() {
    let s1 = String::from("hello");
    let len = calculate_length(&s1);

    println!("'{}'の長さは{}です", s1, len); // s1はまだ使える
}

&s1のように&を付けて渡すと、所有権を渡さずに値への参照を渡すことができます。関数の引数の型も&Stringのように&を付けます。

可変な参照(&mut)

参照先の値を変更したい場合は、&mutを使います。

fn add_world(s: &mut String) {
    s.push_str(", world");
}

fn main() {
    let mut s = String::from("hello");
    add_world(&mut s);
    println!("{}", s); // hello, world
}

借用のルール

Rustの借用には、以下のルールがあります。

  • ある値に対して、不変な参照(&)はいくつでも同時に存在できる。
  • ただし、可変な参照(&mut)は同時に1つしか存在できない。
  • 不変な参照と可変な参照を同時に存在させることはできない。

演習:Vecの合計を借用で求める

コード提出フォーム

RUST

安全なサーバー側採点連携が未接続のため、現在は提出できません。

採点基盤準備中

公開テストケース

読み込み中…