Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/rust/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Rust 什么';常量、正则不可变变量和静态变量之间的区别是什么?_Rust - Fatal编程技术网

Rust 什么';常量、正则不可变变量和静态变量之间的区别是什么?

Rust 什么';常量、正则不可变变量和静态变量之间的区别是什么?,rust,Rust,我正在学习Rust,到目前为止,似乎有3种方法可以声明变量: const A: u8 = 42; static A: u8 = 42; let A: u8 = 42; 我知道你不能有一个可变的const,如果它不是大写的,编译器会警告你,当你使用const时,等价的C预编译器会用一个文本42替换a出现的每个地方(它不会有一个一致的内存地址) 从实践的角度来看,我看不出它们之间有任何不可改变的区别。它们都不能变异。它们都可以完全相同地使用。区别是什么?-const定义值,这些值在相应的代码中被替

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

const A: u8 = 42;
static A: u8 = 42;
let A: u8 = 42;
我知道你不能有一个可变的
const
,如果它不是大写的,编译器会警告你,当你使用
const
时,等价的C预编译器会用一个文本
42
替换
a
出现的每个地方(它不会有一个一致的内存地址)


从实践的角度来看,我看不出它们之间有任何不可改变的区别。它们都不能变异。它们都可以完全相同地使用。区别是什么?

-
const
定义值,这些值在相应的代码中被替换
-
static
定义表示内存地址的全局变量,即只读内存、全局原子计数器或锁(+初始化)、C-abi交互等
-
定义作用域变量绑定

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


-
const
定义值,这些值在相应的代码中被替换
-
static
定义表示内存地址的全局变量,即只读内存、全局原子计数器或锁(+初始化)、C-abi交互等
-
定义作用域变量绑定

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

有什么区别

这个问题可以很容易地归结为const
vs.immutable
static
,因为这是唯一非常相似的情况(
let
旨在将变量引入当前范围)

const
应该在您不介意将值内联到所有位置时使用。通常,这意味着小物体;通常是常数整数。否则将使用不可变的
静态

实际上,对于大多数用例(特别是私有项),当考虑由LLVM进行优化时,通常差别不大

如果您想导出一个对象和相关的低级问题,那么您可能需要仔细查看codegen是否特别糟糕

有什么区别

这个问题可以很容易地归结为const
vs.immutable
static
,因为这是唯一非常相似的情况(
let
旨在将变量引入当前范围)

const
应该在您不介意将值内联到所有位置时使用。通常,这意味着小物体;通常是常数整数。否则将使用不可变的
静态

实际上,对于大多数用例(特别是私有项),当考虑由LLVM进行优化时,通常差别不大

如果您想导出一个对象和相关的低级问题,那么您可能需要仔细查看codegen是否特别糟糕