2016-03-29 44 views
4

我有一個比特的代碼,這是否:常量中的u32 :: BITS有什麼替代?

const MY_CRAZY_CONSTANT: u32 = 1 << (u32::BITS - 1); 

我試圖編譯它使用鏽病夜間(2016年3月29日)和它失敗消息:

error: no associated item named `BITS` found for type `u32` in the current scope 

我看到它已被棄用,我看到有一個RFC(Sizeof, alignof, offsetof, typeof #591)談論增加一個sizeof關鍵字等,但這是封閉的:推遲。

我猜這個棄用已經在夜間通道中實現了,因爲它已被刪除,我知道我可以做以下操作,但要做到這一點,我需要刪除我的const,而我不想這樣做。

mem::size_of::<u32>() * 8 

那麼,是不是現在,我必須刪除我的常量和重新架構我的代碼或者是有一些其他的方式來實現我原本是這樣嗎?

回答

2

一般的答案是定義自己的常數:

const U32_BITS: usize = 32; 

usize::BITSisize::BITS的特殊情況下,你將需要使用條件編譯。

#[cfg(target_pointer_width = "32")] 
const USIZE_BITS: usize = 32; 
#[cfg(target_pointer_width = "64")] 
const USIZE_BITS: usize = 64;