枣阳网站定制,广东专业网站开发,百度非企推广开户,网站域名为个人的公司能备案文章目录 1. 目的2. 基本用法2.1 说明2.2 运行结果 3. 不推荐或不正确用法3.1 不推荐用小写字母作为常量名字3.2 常量名称中含有小写字母就会报warning3.3 定义常量时#xff0c;不指定数据类型会编译报错 4. const 和 immutable 的区别4.1 const 可以在函数外声明#xff0c… 文章目录 1. 目的2. 基本用法2.1 说明2.2 运行结果 3. 不推荐或不正确用法3.1 不推荐用小写字母作为常量名字3.2 常量名称中含有小写字母就会报warning3.3 定义常量时不指定数据类型会编译报错 4. const 和 immutable 的区别4.1 const 可以在函数外声明let 只能在函数内声明4.2 let 等号右侧可以是运行时确定的内容const 等号右侧必须编译时确定 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 运行结果
zzLegion-R7000P% rustc f1.rs
zzLegion-R7000P% ./f1
PI 3.14159263. 不推荐或不正确用法
3.1 不推荐用小写字母作为常量名字
fn main() {// 常量 g 是小写字母 rust 编译器会提示为警告const g:f64 9.78186;println!(g {}, g);
}zzLegion-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 defaultwarning: 1 warning emitted3.2 常量名称中含有小写字母就会报warning
fn main() {// 常量 Gravity 包含了小写字母 rust 编译器会提示为警告const Gravity:f64 9.78186;println!(Gravity {}, Gravity);
}zzLegion-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 defaultwarning: 1 warning emitted3.3 定义常量时不指定数据类型会编译报错
fn main() {// 常量 G 应该指定数据类型否则编译报错const G 9.78186;println!(G {}, G);
}zzLegion-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: : f64error: aborting due to previous error4. const 和 immutable 的区别
抛开变量/常量名字的大小写我们考虑 const 和 immutable 的区别。如下代码乍一看好像都表达了 C/C 语言中的 const:
let g:f64 9.78186;和
const G:64 9.78186;4.1 const 可以在函数外声明let 只能在函数内声明
如下是一个错误示范会触发编译报错原因是 let g:f649.78186 不能放在函数外头。 f5.rust:
let g:f64 9.78186;fn main() {println!(hello rust);
}zzLegion-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 variableserror: aborting due to previous error如下是一个正确的例子 const G:f64 78186 可以放在函数外定义 f6.rust:
const G:f64 9.78186;fn main() {println!(hello rust);println!(G {}, G);
}运行不会报错
zzLegion-R7000P% ./f6
hello rust
G 9.781864.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; // okconst H:i32 a 232; // cause compile errorprintln!(a {}, a);println!(b {}, b);println!(H {}, H);
}zzLegion-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 Herror: aborting due to previous errorFor more information about this error, try rustc --explain E0435.5. 总结 rust 语言中的 const 表达的是 C/C 中的 constexpr 的含义 是编译期确定取值因此不能把运行期确定值的变量赋值到 const 修饰的变量上。 rust 语言的 const, 可以在函数外使用 而 let a123 形式定义变量 虽然是 immutable 的但是只能在函数内使用。