在 Rust 中,可以使用
const
和
static
來定義全域變量。那麽問題來了:為什麽 Rust 提供了兩種全域變量型別?難道一種還不夠用嗎?本文將帶你了解這兩者的區別以及如何選擇合適的型別。
const
的語法與特性
語法
要聲明一個
const
常量,通常在程式碼的開頭定義,並且使用全大寫的命名方式。例如:
const NUMBER_OF_DAYS: u32 = 7;
特性
編譯時確定的值
const
的值是在編譯時確定的。如果你對編譯過程不熟悉,可以先了解相關基礎知識。全域可存取且不會被釋放
const
值是全域的,在程式執行期間始終可用,並且不會從記憶體中釋放。不能分配在堆上
const
值不能是堆分配的數據。如果你想了解哪些型別會分配在棧上或堆上,可以參考相關的型別分配表。
static
的語法與特性
語法
要聲明一個
static
靜態變量,同樣需要在程式碼的開頭定義,並使用全大寫的命名方式。例如:
static DAYS_OF_THE_WEEK: [&str; 7] = [
"Monday",
"Tuesday",
"Wednesday",
"Thursday",
"Friday",
"Saturday",
"Sunday",
];
特性
可以在編譯時建立,也可以在執行時建立
static
的值通常在編譯時建立,但在某些情況下(例如使用不安全程式碼)也可能在執行時建立。如果你對編譯過程不熟悉,可以先了解相關基礎知識。全域可存取且不會被釋放
與const
一樣,static
值是全域的,在程式執行期間始終可用,並且不會從記憶體中釋放。可以分配在堆上
static
值可以是堆分配的數據。這一特性使得它們適合用於跨執行緒共享的數據。可以是可變的(需使用不安全程式碼)
在編寫不安全程式碼時,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
!