rust abc(5): 常量

这篇具有很好参考价值的文章主要介绍了rust abc(5): 常量。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

rust abc(5): 常量

1. 目的

学习 rust 语言中常量的使用。

2. 基本用法

2.1 说明

const 大写名字:数据类型 = 值;

例如定义数学中的 π 为常量, const PI:f64 = 3.1415926;

fn main() {
    // const 大写名字:数据类型 = 值;
    const PI:f64 = 3.1415926;
    println!("PI {}", PI);
}

2.2 运行结果

zz@Legion-R7000P% rustc f1.rs 
zz@Legion-R7000P% ./f1 
PI 3.1415926

3. 不推荐或不正确用法

3.1 不推荐用小写字母作为常量名字

fn main() {
    // 常量 g 是小写字母, rust 编译器会提示为警告
    const g:f64 = 9.78186;
    println!("g {}", g);
}

rust abc(5): 常量

zz@Legion-R7000P% rustc f2.rs 
warning: constant `g` should have an upper case name
 --> f2.rs:3:11
  |
3 |     const g:f64 = 9.78186;
  |           ^ help: convert the identifier to upper case: `G`
  |
  = note: `#[warn(non_upper_case_globals)]` on by default

warning: 1 warning emitted

3.2 常量名称中含有小写字母就会报warning

fn main() {
    // 常量 Gravity 包含了小写字母, rust 编译器会提示为警告
    const Gravity:f64 = 9.78186;
    println!("Gravity {}", Gravity);
}

rust abc(5): 常量

zz@Legion-R7000P% rustc f3.rs
warning: constant `Gravity` should have an upper case name
 --> f3.rs:3:11
  |
3 |     const Gravity:f64 = 9.78186;
  |           ^^^^^^^ help: convert the identifier to upper case: `GRAVITY`
  |
  = note: `#[warn(non_upper_case_globals)]` on by default

warning: 1 warning emitted

3.3 定义常量时,不指定数据类型会编译报错

fn main() {
    // 常量 G 应该指定数据类型,否则编译报错
    const G = 9.78186;
    println!("G {}", G);
}

rust abc(5): 常量

zz@Legion-R7000P% rustc f4.rs
error: missing type for `const` item
 --> f4.rs:3:12
  |
3 |     const G = 9.78186;
  |            ^ help: provide a type for the constant: `: f64`

error: aborting due to previous error

4. const 和 immutable 的区别

抛开变量/常量名字的大小写,我们考虑 const 和 immutable 的区别。如下代码乍一看,好像都表达了 C/C++ 语言中的 const:

let g:f64 = 9.78186;

const G:64 = 9.78186;

4.1 const 可以在函数外声明,let 只能在函数内声明

如下是一个错误示范,会触发编译报错,原因是 let g:f64=9.78186 不能放在函数外头。
f5.rust:

let g:f64 = 9.78186;

fn main() {
    println!("hello rust");
}

rust abc(5): 常量

zz@Legion-R7000P% rustc f5.rs 
error: expected item, found keyword `let`
 --> f5.rs:1:1
  |
1 | let g:f64 = 9.78186;
  | ^^^ consider using `const` or `static` instead of `let` for global variables

error: aborting due to previous error

如下是一个正确的例子, const G:f64 = 78186 可以放在函数外定义:
f6.rust:

const G:f64 = 9.78186;

fn main() {
    println!("hello rust");
    println!("G {}", G);
}

运行不会报错:

zz@Legion-R7000P% ./f6 
hello rust
G 9.78186

4.2 let 等号右侧可以是运行时确定的内容,const 等号右侧必须编译时确定

也就是说, rust 语言中的 const, 表达的是编译期就确定的值, 可以理解为 C/C++ 中的 constexpr, 而并不是等同于 C/C++ 的 const.

例如如下代码的 const H:i32 = a + 232 将导致编译报错, 而 let b = a + 232 则不会报错。
f7.rs:

fn main() {
    let a = 1;
    let b = a + 232; // ok

    const H:i32 = a + 232; // cause compile error

    println!("a = {}", a);
    println!("b = {}", b);
    println!("H = {}", H);
}

rust abc(5): 常量

zz@Legion-R7000P% rustc f7.rs 
error[E0435]: attempt to use a non-constant value in a constant
 --> f7.rs:5:19
  |
5 |     const H:i32 = a + 232;
  |     -------       ^ non-constant value
  |     |
  |     help: consider using `let` instead of `const`: `let H`

error: aborting due to previous error

For more information about this error, try `rustc --explain E0435`.

5. 总结

  1. rust 语言中的 const 表达的是 C/C++ 中的 constexpr 的含义, 是编译期确定取值,因此不能把运行期确定值的变量赋值到 const 修饰的变量上。

  2. rust 语言的 const, 可以在函数外使用, 而 let a=123 形式定义变量, 虽然是 immutable 的,但是只能在函数内使用。文章来源地址https://www.toymoban.com/news/detail-510722.html

到了这里,关于rust abc(5): 常量的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Rust 笔记:Rust 语言中的常量与变量

    Rust 笔记 Rust 语言中的常量与变量 作者 : 李俊才 (jcLee95):https://blog.csdn.net/qq_28550263?spm=1001.2101.3001.5343 邮箱 : 291148484@163.com 本文地址 :https://blog.csdn.net/qq_28550263/article/details/130875912 【介绍】:本文介绍 Rust 语言中的常量与变量。 上一节:《 上一节标题 》 | 下一节:《

    2024年02月06日
    浏览(60)
  • CSS样式学习-基本用法

    html超文本传输标签,属性等权重 outline 标签轮廓     input type=\\\"text\\\"     textarea  cols=\\\"30\\\" rows=\\\"10\\\"/textarea outline: none; 表示无轮廓     (开发时用的比较多) CSS 轮廓(outline)属性 | 菜鸟教程 css匹配流程(从下到上,从右到左) Butten去掉边框 CSS 按钮 | 菜鸟教程 复合词   id 下

    2024年01月17日
    浏览(29)
  • Gradio学习笔记--Gradio基本用法和简单案例

    ​​​​​​​ 目录 1--配置Gradio 2--Hello World案例 2-1--基本使用 2-2--进阶使用 3--图像案例 3--常用类 Interface 和 Blocks         使用 pip 安装 Gradio:         类 gr.Interface()可以包含任何 Python 函数,其通过以下三个必需的参数进行初始化: ① fn:封装好的 Python 函数,即上例

    2024年02月02日
    浏览(37)
  • 二、GoLang输出HelloWorld、基本数据类型、变量常量定义、基本类型转换

    go语言中,想要输出内容到控制台,package必须是main,包括方法名也必须是main, go语言输出的语法是 fmt 库。 Go语言的基本类型有: boolean:布尔类型 true / false string :字符串类型 数值型: int8:有符号8位整型(-128到127)长度 int16:有符号16位整型(-32768到32767)长度 int32:有

    2024年02月09日
    浏览(59)
  • 【Python_Matplotlib学习笔记(一)】pyplot模块的基本用法

    Matplotlib 是一个 Python 的 2D绘图库,它以各种硬拷贝格式和跨平台的交互式环境生成出版质量级别的图形(来自:百度百科)。pyplot 模块是 Matplotlib 模块提供的快速绘图模块,它模仿了 MATLAB 的部分功能。在本文中主要介绍 pyplot 模块的基本用法,会进行持续的更新,欢迎各位

    2024年02月12日
    浏览(42)
  • 如何理解Go言中的Context?

    目前看过除了《go语言程序设计》以外最好的教程:https://www.practical-go-lessons.com 原文:https://www.practical-go-lessons.com/chap-37-context 你将在本章中学到什么? 1.什么是上下文? 2.什么是链表? 3.如何使用上下文包? 涵盖的技术概念 Context derivation Linked list Context key-value pair Cancella

    2024年02月08日
    浏览(43)
  • 【Go基础】编译、变量、常量、基本数据类型、字符串

    面试题文档下链接点击这里免积分下载 go语言入门到精通点击这里免积分下载 使用 go build 1.在项目目录下执行 2.在其他路径下编译 go build ,需要再后面加上项目的路径(项目路径从GOPATH/src后开始写起,编译之后的可执行文件就保存再当前目录) 3.打包的时候自定义名字:

    2024年02月09日
    浏览(58)
  • pytest中conftest的用法以及钩子基本使用

    conftest是pytest进阶中的高级应用,最近正好用到这一块儿,研究之后,向大家分享该高级应用。 1.conftest代码块 以全局性使用driver为主,只启动一次浏览器: @pytest.fixture(scope=\\\'session\\\')  # 以此实现多个用例,只启动一次浏览器 def browser ():     global driver     driver = None  # 需要

    2024年02月16日
    浏览(41)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包