const 中 u32::BITS 的替代方案是什么?

kmp*_*kmp 5 rust

我有一些代码可以做到这一点:

const MY_CRAZY_CONSTANT: u32 = 1 << (u32::BITS - 1); 
Run Code Online (Sandbox Code Playgroud)

我尝试使用 Rust nightly (2016-03-29) 编译它,但失败并显示以下消息:

error: no associated item named `BITS` found for type `u32` in the current scope
Run Code Online (Sandbox Code Playgroud)

我发现它已被弃用,并且有一个 RFC(Sizeof、alignof、offsetof、typeof #591)谈论添加 sizeof 关键字等,但已关闭:推迟。

我想弃用已在夜间频道中实现,因为它已被删除,并且我知道我可以执行以下操作,但要做到这一点,我需要删除我的 const,而我宁愿不这样做。

mem::size_of::<u32>() * 8
Run Code Online (Sandbox Code Playgroud)

那么,现在我是否必须删除 const 并重新构造我的代码,或者是否有其他方法来实现我最初的目标?

She*_*ter 3

一般的答案是定义你自己的常量:

const U32_BITS: usize = 32;
Run Code Online (Sandbox Code Playgroud)

usize::BITS对于or的特殊情况isize::BITS,您将需要使用条件编译。

#[cfg(target_pointer_width = "32")]
const USIZE_BITS: usize = 32;
#[cfg(target_pointer_width = "64")]
const USIZE_BITS: usize = 64;
Run Code Online (Sandbox Code Playgroud)