繁体   English   中英

常量、常规不可变变量和 static 变量之间有什么区别?

[英]What's the difference between a constant, and regular immutable variable, and a static variable?

我正在学习 Rust,到目前为止,似乎有 3 种声明变量的方法:

const A: u8 = 42;
static A: u8 = 42;
let A: u8 = 42;

我知道你不能有一个可变的const ,如果它不是全部大写,编译器会警告你,当你使用const时,相当于 C 预编译器将用文字替换A出现的每个地方42 (它不会有一致的 memory 地址)。

从实际的角度来看,我认为它们的不可变形式之间没有任何区别。 它们中的任何一个都不能突变。 它们都可以完全相同地使用。 有什么不同?

- const定义值,在相应代码中替换
- static定义了代表memory地址的全局变量,即只读memory,全局原子计数器或锁等(+初始化),C-abi交互
- let定义范围变量绑定

您不能使用let作为全局变量(静态生命周期),因此static适合该角色。 请注意,它也作为生命周期注释存在。

参考说明

有什么不同?

这个问题可以很容易地简化为const与不可变static因为这是唯一非常相似的情况( let旨在将变量引入当前范围)。

当您不介意在整个地方内联的值时,应该使用const 通常,这意味着小物体; 通常为常数整数。 否则使用不可变static

在实践中,对于大多数用例(特别是私有项目),在考虑 LLVM 进行的优化时,通常几乎没有区别。

如果您想导出 object 和相关的低级问题,您可能需要仔细查看 codegen 是否特别糟糕。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM