全局变量

9 篇文章 1 订阅
6 篇文章 0 订阅
本文介绍了Rust中全局变量的使用限制及初始化要求,并展示了如何通过`static`关键字声明全局变量。同时,讲解了不推荐全局变量的原因,并引入`lazy_static`宏来实现延迟初始化,以解决实际应用需求。示例代码演示了`lazy_static`的使用方法。
摘要由CSDN通过智能技术生成


提示

所有帖子都会不定期添加补充实战过程中发现的新内容,力争一篇文章涵盖所有内容,避免你多次查找文章,所以最好点赞或收藏,时不时回来看看。


废话

rust不建议全局变量,但实际应用又需要,所以可以用下面的方式使用全局变量,全局变量使用static来声明。用static声明的变量生命周期是整个程序,从启动到退出,它占用的内存空间也不会在执行过程中回收,这也是rust中唯一声明全局变量的方法,全局变量使用有一些限制,都是为了防止你写出不安全的代码:
1.全局变量在声明时要初始化成编译期可确定的常量,不能是执行时才能确定的表达式、语句、函数调用的结果;
2.带有mut修饰的全局变量,在使用时必须要用unsafe操作;

使用全局变量

static GA: i32 = 0;
static mut GB: i32 = 1;
static mut PERSON: Person = Person {age: 9};

struct Person {
    age: u8,
}

fn main() {
    println!("GA is {}", GA);  // 如果全局变量不修改,应该用常量更合适
    unsafe {  // 修改可变的全局变量是不安全的,要unsafe
        GB = 3;
        println!("GB is {}", GB);
        PERSON.age = 19;
        println!("person.age is {}", PERSON.age);
    }
}

执行结果:

GA is 0
GB is 3
person.age is 19

使用lazy_static!

lazy_static不是标准库,使用前要在Cargo.toml里添加

[dependencies]
lazy_static = "1.4.0"
use lazy_static::lazy_static;

struct Person {
    age: u8,
}

fn main() {
    // static 懒加载,无需在编译时计算其值,在首次访问时进行初始化
    lazy_static! {
        static ref GPERSON: Person = Person {age: 9};
    }

    println!("person.age is {}", GPERSON.age);
}

执行结果:

person.age is 9
  • 11
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值