English

型システム編 - スコープと有効性

難易度: 🔴 上級 所要時間: 10分

現在の実装状況

重要: Cm v0.11.0時点では、ライフタイムパラメータ('a'staticなど)は実装されていません

スコープルール

現在のCmでは、以下の基本的なスコープルールが適用されます:

int main() {
    int* r;
    {
        int x = 5;
        r = &x; // xはこのブロックの終わりで破棄される
    }
    // *rを使用すると未定義動作(コンパイラは現在これを検出しない)
    return 0;
}

借用の基本ルール

現在実装されている借用チェック:

  1. 借用中の移動禁止 - ポインタが取得された変数はmoveできない
  2. 借用中の変更禁止 - ポインタで参照中の変数への代入は禁止
int main() {
    int x = 100;
    const int* px = &x;  // xを借用

    // int y = move x;  // エラー: 借用中は移動不可
    // x = 200;         // エラー: 借用中は変更不可

    return 0;
}

今後の実装予定

将来的には以下の機能が検討されていますが、現時点では未実装です:


前の章: 所有権と借用


最終更新: 2026-02-08