Rust 中的 `const` 和 `static` rust &string &str

Rust 中的 `const` 和 `static` rust &string &str

编码文章call10242024-12-18 12:30:2126A+A-

在 Rust 中,可以使用conststatic 来定义全局变量。那么问题来了:为什么 Rust 提供了两种全局变量类型?难道一种还不够用吗?本文将带你了解这两者的区别以及如何选择合适的类型。


const的语法与特性

语法

要声明一个const 常量,通常在代码的开头定义,并且使用全大写的命名方式。例如:

const NUMBER_OF_DAYS: u32 = 7;

特性

  1. 编译时确定的值
    const 的值是在编译时确定的。如果你对编译过程不熟悉,可以先了解相关基础知识。
  2. 全局可访问且不会被释放
    const 值是全局的,在程序运行期间始终可用,并且不会从内存中释放。
  3. 不能分配在堆上
    const 值不能是堆分配的数据。如果你想了解哪些类型会分配在栈上或堆上,可以参考相关的类型分配表。

static的语法与特性

语法

要声明一个static 静态变量,同样需要在代码的开头定义,并使用全大写的命名方式。例如:

static DAYS_OF_THE_WEEK: [&str; 7] = [
    "Monday",
    "Tuesday",
    "Wednesday",
    "Thursday",
    "Friday",
    "Saturday",
    "Sunday",
];

特性

  1. 可以在编译时创建,也可以在运行时创建
    static 的值通常在编译时创建,但在某些情况下(例如使用不安全代码)也可能在运行时创建。如果你对编译过程不熟悉,可以先了解相关基础知识。
  2. 全局可访问且不会被释放
    const 一样,static 值是全局的,在程序运行期间始终可用,并且不会从内存中释放。
  3. 可以分配在堆上
    static 值可以是堆分配的数据。这一特性使得它们适合用于跨线程共享的数据。
  4. 可以是可变的(需使用不安全代码)
    在编写不安全代码时,static 值可以是可变的。

如何选择:const还是static?

使用const的场景

  • 编译时的常量值,例如数字、字符串、数学常数等。
  • 数据在整个程序生命周期内不会改变。

使用static的场景

  • 跨线程共享的可变状态(需要同步机制)。
  • 涉及不安全代码的场景。

总结

Rust 提供了conststatic 两种全局变量类型,以满足不同的需求。const 更适合用于编译时的不可变常量,而static 则适合用于需要跨线程共享或涉及堆分配的数据。在实际开发中,根据具体需求选择合适的类型,可以更好地利用 Rust 的特性,编写高效、安全的代码。


示例代码

以下是conststatic 的简单示例代码:

// 使用 const 定义编译时常量
const PI: f64 = 3.141592653589793;

// 使用 static 定义静态数组
static WEEKDAYS: [&str; 7] = [
    "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday",
];
点击这里复制本文地址 以上内容由文彬编程网整理呈现,请务必在转载分享时注明本文地址!如对内容有疑问,请联系我们,谢谢!
qrcode

文彬编程网 © All Rights Reserved.  蜀ICP备2024111239号-4