G.CNS.05 对于适用 const fn 的函数或方法宜尽可能地使用 const fn

【级别】 建议

【描述】

函数或方法缺失const关键词时无法被指派给常量。

但是要注意不是所有函数都能使用const fn,因为相比一般函数或方法,const fn在使用时会有限制,必须满足const 安全,如果不满足,编译器会报告错误信息。

【反例】


#![allow(unused)]
fn main() {
fn foo() -> usize {
    10
}

// 不符合:必须是 constant 函数才能用于声明 const 常量
const BAZ: usize = foo(); 
}

【正例】


#![allow(unused)]
fn main() {
const fn foo() -> usize {
    10
} 

const BAZ: usize = foo(); // 符合
}

【例外】


#![allow(unused)]
fn main() {
const fn foo() -> bool {
    for _i in 0..5 {}      // ERROR, 因为for loop默认不能用在const fn内(需要注明#![feature(const_for)])
    false
}
}

【Lint 检测】

lint nameClippy 可检测Rustc 可检测Lint Grouplevel
missing_const_for_fnyesnoPerfwarn