Rust中的const和static

栏目: 编程语言 · Rust · 发布时间: 4年前

内容简介:这里说一下Rust中的对于一个常量可以理解为是一个C语言中的

这里说一下Rust中的 conststatic ,因为经常会用到,而且与其他语言略微有点区别,如果用其他语言的含义理解Rust中的,可能会造成困扰。

const

对于 const ,常量贯穿于整个程序的生命周期。更具体的,Rust 中的常量并没有固定的内存地址。这是因为实际上它们会被 内联 到用到它们的地方。 为此对同一常量的引用并不能保证引用到相同的内存地址。

const N: i32 = 5;    //定义一个整型常量

一个常量可以理解为是一个 C语言 中的 #define ,它有元数据开销但无运行时开销。

static

对于 static ,Rust以静态量的方式提供了类似“全局变量”的功能。它们与常量类似,不过静态量在使用时并不内联。这意味着对每一个值只有一个实例,并且位于内存中的固定位置。

static N: i32 = 5;
static NAME: &'static str = "Steve";     //静态量贯穿于整个程序的生命周期,因此任何存储在常量中的引用有一个'static生命周期

//因为这是可变的,一个线程可能在更新N同时另一个在读取它,导致内存不安全。
//因此访问和改变一个static mut是不安全(unsafe)的,因此必须在unsafe块中操作
static mut NUM: i32 = 10;
unsafe {
    NUM=NUM+1;
}

初始化

conststatic 都要求赋予它们一个值。它们必须只能被赋予一个常量表达式的值。换句话说,你不能用一个函数调用的返回值或任何相似的复合值或在运行时赋值。

如果想赋予一个非常量表达式,可以参考用第三方库lazy_static(A macro for declaring lazily evaluated statics in Rust.)解决。

Using this macro, it is possible to have statics that require code to be executed at runtime in order to be initialized. This includes anything requiring heap allocations, like vectors or hash maps, as well as anything that requires non-const function calls to be computed.

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

裂变式创业

裂变式创业

宗毅、小泽 / 机械工业出版社 / 2016-1-1 / 39.84

互联网大潮汹涌来袭,传统企业增长乏力,互联网公司跨界冲击,转型之路迫在眉睫。“转型找死,不转型等死”这一坊间传说让多数企业徘徊不前,不少实体经济面临困境,敢问路在何方? 宗毅独创裂变式创业,用人民币投票选总经理,规定自己不投钱不能参与竞选;不相信干股,不使用职业经理人,用金融的方式管理现金流。用商业模式颠覆传统公益,打通南北充电之路;摇身一变成为自媒体,用产品建立社群。自己写故事,自己当导演......一起来看看 《裂变式创业》 这本书的介绍吧!

JS 压缩/解压工具
JS 压缩/解压工具

在线压缩/解压 JS 代码

CSS 压缩/解压工具
CSS 压缩/解压工具

在线压缩/解压 CSS 代码

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具