Skip to content

G.TYP.01 数值字面量要添加明确的类型标识

【级别】 要求

【描述】

如果数值字面量没有被指定具体类型,那么单靠类型推导,整数类型会被默认绑定为 i32 类型,而浮点 数则默认绑定为 f64 类型。这可能导致某些运行时的意外,比如因为类型预期错误,导致应该在编译期 发现的问题遗留到运行时,比如导致数据计算溢出等问题。

【反例】

Rust
// 期望是 u64 类型,用于统计数据,不考虑溢出问题
let mut count = 0;

while (/* ... */) {
  // 每秒执行一次网络流量统计
  let bytes: i32 = /* get packet size */
  // 不符合: u64 不会溢出,而 i32 可能会溢出。此处本应该编译报错。
  count += bytes; 
}

【反例】

Rust
#![warn(clippy::default_numeric_fallback)]
// 不符合
let i = 10; // i32
let f = 1.23; // f64

【正例】

Rust
#![warn(clippy::default_numeric_fallback)]
// 符合
let i: u32 = 10;
let f: f32 = 1.23;
// 符合
let i = 10u32;
let f = 1.23f32;