静的にサイズが決まる型と動的にサイズが決まる型
// 著作権 2025 Google LLC // SPDX-License-Identifier: Apache-2.0 use std::fmt::Debug; pub struct AlwaysSized<T /* : Sized */>(T); pub struct OptionallySized<T: ?Sized>(T); type Dyn1 = OptionallySized<dyn Debug>;
-
動機: サイズがコンパイル時にわかる型と、サイズが実行時にわかる型を区別して指定できることは、次の点で有用です
-
Sizedトレイトは、サイズがコンパイル時にわかる型に対して自動的に実装されます。このトレイトは、
Sizedであることをオプトアウトしていないすべての型パラメータにも自動的に追加されます。 -
ほとんどの型は
Sizedを実装しています。つまり、それらのサイズはコンパイル時にわかります。[T]、str、dyn Traitのような型は、いずれも動的サイズ型です。それらのサイズは、その型の値への参照の一部として格納されます。 -
型パラメータは、特に指定しない限り自動的に
Sizedを実装します。
参考:
- https://doc.rust-lang.org/stable/reference/dynamically-sized-types.html#r-dynamic-sized