當前位置: 妍妍網 > 碼農

Rust 中的 `const` 和 `static`

2024-12-07碼農


在 Rust 中,可以使用 const static 來定義全域變量。那麽問題來了:為什麽 Rust 提供了兩種全域變量型別?難道一種還不夠用嗎?本文將帶你了解這兩者的區別以及如何選擇合適的型別。

const 的語法與特性

語法

要聲明一個 const 常量,通常在程式碼的開頭定義,並且使用全大寫的命名方式。例如:

const NUMBER_OF_DAYS: u32 = 7;

特性

  1. 編譯時確定的值
    const 的值是在編譯時確定的。如果你對編譯過程不熟悉,可以先了解相關基礎知識。

  2. 全域可存取且不會被釋放
    const 值是全域的,在程式執行期間始終可用,並且不會從記憶體中釋放。

  3. 不能分配在堆上
    const 值不能是堆分配的數據。如果你想了解哪些型別會分配在棧上或堆上,可以參考相關的型別分配表。

static 的語法與特性

語法

要聲明一個 static 靜態變量,同樣需要在程式碼的開頭定義,並使用全大寫的命名方式。例如:

static DAYS_OF_THE_WEEK: [&str; 7] = [
"Monday",
"Tuesday",
"Wednesday",
"Thursday",
"Friday",
"Saturday",
"Sunday",
];

特性

  1. 可以在編譯時建立,也可以在執行時建立
    static 的值通常在編譯時建立,但在某些情況下(例如使用不安全程式碼)也可能在執行時建立。如果你對編譯過程不熟悉,可以先了解相關基礎知識。

  2. 全域可存取且不會被釋放
    const 一樣, static 值是全域的,在程式執行期間始終可用,並且不會從記憶體中釋放。

  3. 可以分配在堆上
    static 值可以是堆分配的數據。這一特性使得它們適合用於跨執行緒共享的數據。

  4. 可以是可變的(需使用不安全程式碼)
    在編寫不安全程式碼時, static 值可以是可變的。

如何選擇: const 還是 static

使用 const 的場景

  • 編譯時的常量值,例如數位、字串、數學常數等。

  • 數據在整個程式生命周期內不會改變。

  • 使用 static 的場景

  • 跨執行緒共享的可變狀態(需要同步機制)。

  • 涉及不安全程式碼的場景。

  • 總結

    Rust 提供了 const static 兩種全域變量型別,以滿足不同的需求。 const 更適合用於編譯時的不可變常量,而 static 則適合用於需要跨執行緒共享或涉及堆分配的數據。在實際開發中,根據具體需求選擇合適的型別,可以更好地利用 Rust 的特性,編寫高效、安全的程式碼。

    範例程式碼

    以下是 const static 的簡單範例程式碼:

    // 使用 const 定義編譯時常量
    const PI: f64 = 3.141592653589793;

    // 使用 static 定義靜態陣列
    static WEEKDAYS: [&str; 7] = [
    "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday",
    ];

    希望這篇文章能幫助你更好地理解 Rust 中的 const static

    點選關註並掃碼添加進交流群
    免費領取「Rust 語言」學習資料