导入
局部变量
了解 const 本地变量。
const 局部变量简介
我们可以将所有不会改变值的局部变量声明为 const。这样做有助于代码未来的阅读者(包括我们自己)以及编译器进行一些优化。
局部变量与全局变量
1auto mutableNumber{42}; 2mutableNumber = 666; // 正常,允许修改 3const auto immutableNumber{42}; 4immutableNumber = 666; // 错误:无法给只读变量赋值
如前所述,如果我们将一个局部变量声明为 const,就表示该变量是不可变的,其值永远无法更改。如果我们试图后续修改它,将会出现编译错误:你不能给只读变量赋值。
默认将对象设为不可变,并仅对那些在构造后不会发生变化的对象使用 const,是一种推荐的做法。
将全局变量设为不可变非常有用,因为否则任何人都可以修改它们的值。然而,许多开发者选择避免使用全局常量,因为它们可能引入不必要的组件间耦合。
使用 const 的编译器优化
将变量声明为 const 还能让编译器执行一些优化。除非我们显式地将变量声明为 const,否则编译器无法确定该变量是否会发生变化。虽然这可能不会带来直接的好处,但也不会增加额外的指令开销。另一方面,正如我们刚才提到的,它可能帮助编译器大幅优化生成的指令。
因此,只要我们知道某个变量的值不会改变,就应该将其声明为 const,无论是局部变量还是全局变量。
实际上,我们往往会忘记将变量声明为 const,即使我们清楚它对代码可维护性和可读性的积极影响,也理解 const 对代码复杂度没有负面影响。即便如此,有时仍会遗漏某些变量的 const 声明。
许多现代编程语言已经解决了这个问题,将大多数变量默认设为不可变。例如,在 Rust 编程语言中,所有变量默认都是不可变的,除非我们显式声明为可变。
我们有充分理由遵循类似的实践。
如果我们的局部变量不需要改变值,就应将其声明为 const。至于全局变量,尽量避免使用!如果确实需要使用,应尽可能只使用 const 变量。