File tree Expand file tree Collapse file tree 1 file changed +22
-0
lines changed Expand file tree Collapse file tree 1 file changed +22
-0
lines changed Original file line number Diff line number Diff line change @@ -41,6 +41,8 @@ a = 2; // 变量 a 可变,OK
41
41
42
42
这种说法是不严格的,但是这样思考可以快速上手。
43
43
44
+ Rust 的这种设计看似奇怪,其实也有其用意。一般大部分变量的值实际上都不需要修改,默认不可变可以强制程序员思考变量是否需要修改,从而避免了一些潜在的错误。而在 C++ 中想达到相同的效果,则需要主动使用大量 ` const ` 关键字,其繁琐会让大部分程序员不愿意这么做。
45
+
44
46
!!! note "如何打印一个变量"
45
47
46
48
```rust
@@ -50,6 +52,26 @@ a = 2; // 变量 a 可变,OK
50
52
51
53
这里的 `println!` 是一个宏,但使用起来与函数很相似。
52
54
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
+
53
75
## 变量类型
54
76
55
77
### 基本类型
You can’t perform that action at this time.
0 commit comments