キャスト
Rust には 暗黙的 な型変換はありませんが、as
による明示的なキャストはサポートされています。これらのキャストは通常、それらが定義されている C セマンティクスに従います。
fn main() { let value: i64 = 1000; println!("as u16: {}", value as u16); println!("as i16: {}", value as i16); println!("as u8: {}", value as u8); }
as
の結果は Rust で 常に 定義され、プラットフォーム間で一貫しています。これは、正負の符号を変えたり、より小さな型にキャストしたりする際に得られる直感に反しているかもしれません。ドキュメントを確認し、明確にするためにコメントを記述してください。
as
を使用したキャストは比較的扱いにくく、誤って使用することが少なくありません。また、将来のメンテナンス作業で、使用される型や型の値の範囲が変更された際に、わかりにくいバグが発生する可能性があります。キャストは、無条件の切り捨てを示すことを目的としている場合にのみ、最適に使用されます(たとえば、上位ビットの内容に関係なく、as u32
で u64
の下位 32 ビットを選択する場合)。
絶対に正しいキャスト(例: u32
から u64
へのキャスト)では、キャストが実際に完璧であることを確認するために、as
ではなく From
または Into
を使用することをおすすめします。正しくない可能性があるキャストについては、絶対に正しいキャストとは異なる方法でそれらを処理したい場合に、TryFrom
と TryInto
を使用できます。
このスライドの後で休憩を取ることを検討してください。
as
は C++ の静的キャストに似ています。データが失われる可能性がある状況で as
を使用することは、一般的に推奨されません。使用する場合は、少なくとも説明のコメントを記述することをおすすめします。
これは、整数をusize
にキャストしてインデックスとして使用する場合に一般的です。