变量 (Variables)

在 Zig 中,你可以使用 const 声明常量,使用 var 声明变量。

const (常量)

  • const 声明的值必须在编译时或运行时初始化,并且一旦初始化后就不能被修改。
  • 编译器会尝试将 const 值视为编译时已知,以进行优化。
const answer = 42;
const name: []const u8 = "Zig";

var (变量)

  • var 声明的值可以在其生命周期内被修改。
  • var 必须被初始化,但可以使用 undefined 来表示一个未指定的值。
var counter: i32 = 0;
counter += 1;

var temp_value: f32 = undefined;
temp_value = 1.23;

标识符 (Identifiers)

标识符用于命名变量、函数、类型等。它们必须以字母或下划线开头,后跟字母、数字或下划线。

如果标识符与关键字冲突,可以使用 @"" 语法转义。

容器级变量 (Container Level Variables)

在结构体、枚举或联合等容器中声明的变量是容器级变量。它们属于该容器的类型,而不是实例。

const MyContainer = struct {
    var instance_count: usize = 0; // 容器级变量

    fn init() MyContainer {
        instance_count += 1;
        return MyContainer{};
    }
};

静态局部变量 (Static Local Variables)

在函数内部声明的 var 可以是静态的,这意味着它在函数调用之间保持其值。

fn get_counter() usize {
    var counter: usize = 0; // 这是每次调用都会重新初始化的局部变量
    // 为了实现静态局部变量,通常需要将其定义在函数外部或使用特殊的机制
}

线程局部变量 (Thread Local Variables)

使用 threadlocal 关键字可以声明线程局部变量,每个线程都有其独立的副本。

threadlocal var my_thread_id: usize = 0;

另请参阅: