Skip to content

Commit 7b10d79

Browse files
committed
feat(rust): Add content about constants in variable
1 parent 195739c commit 7b10d79

File tree

1 file changed

+22
-0
lines changed

1 file changed

+22
-0
lines changed

docs/languages/rust/variable.md

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,8 @@ a = 2; // 变量 a 可变,OK
4141

4242
这种说法是不严格的,但是这样思考可以快速上手。
4343

44+
Rust 的这种设计看似奇怪,其实也有其用意。一般大部分变量的值实际上都不需要修改,默认不可变可以强制程序员思考变量是否需要修改,从而避免了一些潜在的错误。而在 C++ 中想达到相同的效果,则需要主动使用大量 `const` 关键字,其繁琐会让大部分程序员不愿意这么做。
45+
4446
!!! note "如何打印一个变量"
4547

4648
```rust
@@ -50,6 +52,26 @@ a = 2; // 变量 a 可变,OK
5052

5153
这里的 `println!` 是一个宏,但使用起来与函数很相似。
5254

55+
### 常量
56+
57+
Rust 中的常量使用 `const` 关键字声明,常量的值必须在编译期间确定。常量的类型必须显式指定。
58+
59+
```rust
60+
const SECONDS_PER_DAY: i32 = 24 * 60 * 60; // 常量的值必须在编译期间确定. 能够通过编译
61+
// const B = 1; // 常量必须显式指定类型,编译无法通过
62+
const c: i32 = 1; // 能够通过编译,但会被编译器警告,因为常量名的规范是 大写字母+下划线
63+
```
64+
65+
!!! note "与 C++ 的对照"
66+
67+
Rust 的 `const` 在定位上和 C++ 的 `constexpr` 基本是一致的。
68+
69+
C++ 中,一般把 `const` 与 `constexpr` 所定义的量都笼统地称为“常量”。但从 Rust 的视角看,只有编译期常量才是真正的“常量”,而 C++ 中用 `const` 声明的所谓“常量”在语义上只是一个“不可变量”(readonly,只读),其实反而更接近 变量 而不是 常量。
70+
71+
也许可以这样理解:常量是一个「值」;而变量是一个「对象」、其值可能要在运行时才能确定,而这个变量是否可变则是另一个回事。
72+
73+
例如,定义数组要求数组的长度必须是常量表达式。但 C++ 中 `const` 声明的所谓“常量”并不一定能满足这点;而 C++ 中的 `constexpr` 与 Rust 中的 `const` 则都能满足。
74+
5375
## 变量类型
5476

5577
### 基本类型

0 commit comments

Comments
 (0)