プロパティ
全ての型と式は、プロパティを持っています:
式 | 値 |
---|---|
int.sizeof | 4を返す |
float.nan | 浮動小数点数のNaN(Not A Number)値を返す |
(float).nan | 浮動小数点数のNaN値を返す |
(3).sizeof | 4を返す (3はintなので) |
2.sizeof | 文法エラー。"2." までで浮動小数点数扱いになってしまうので |
int.init | int型の初期値 |
int.mangleof | 文字列 "i" |
int.stringof | 文字列 "int" |
(1+2).stringof | 文字列 "1 + 2" |
プロパティ | 説明 |
---|---|
.init | 初期値 |
.sizeof | byte単位でのサイズ (Cのsizeof(type)と同等) |
.alignof | アラインメントのサイズ |
.mangleof | 型名の'mangled'表現文字列 |
.stringof | その型をソースコード上で表す文字列表現 |
プロパティ | 説明 |
---|---|
.init | 初期値 (0) |
.max | 最大値 |
.min | 最小値 |
プロパティ | 説明 |
---|---|
.init | 初期値 (NaN) |
.infinity | 無限大 |
.nan | NaN |
.dig | 精度の10進桁数 |
.epsilon | 最小の増分値 |
.mant_dig | 仮数部のビット数 |
.max_10_exp | 10の累乗での指数の最大値 |
.max_exp | 2の累乗での指数の最大値 |
.min_10_exp | 10の累乗での指数の最小値 |
.min_exp | 2の累乗での指数の最小値 |
.max | ∞を除いた最大値 |
.min | 0を除いた最小の正規化数 |
.re | 実部 |
.im | 虚部 |
プロパティ | 説明 |
---|---|
.classinfo | クラスの動的な型情報 |
.init プロパティ
.init はデフォルト初期化値を表す定数式です。 型に適用されればその型の初期値となり、 変数やフィールドに適用されれば、 その変数/フィールドを初期化した値となります。 例:
int a; int b = 1; typedef int t = 2; t c; t d = cast(t)3; int.init // is 0 a.init // 0 b.init // 0 t.init // 2 c.init // 2 d.init // 2 struct Foo { int a; int b = 7; } Foo.a.init // 0 Foo.b.init // 7
.stringof プロパティ
.stringof プロパティは、 その対象要素のソースコード上で文字列表現を返します。 型に適用された場合、その型を表す文字列になります。 式に適用された場合、 その式のソースコード上での表現文字列になります。 式に対しては意味解析は行われません。 例:
struct Foo { } enum Enum { RED } typedef int myint; void main() { writefln((1+2).stringof); // "1 + 2" writefln(Foo.stringof); // "Foo" writefln(test.Foo.stringof); // "test.Foo" writefln(int.stringof); // "int" writefln((int*[5][]).stringof); // "int*[5][]" writefln(Enum.RED.stringof); // "Enum.RED" writefln(test.myint.stringof); // "test.myint" writefln((5).stringof); // "5" }
.sizeof プロパティ
e.sizeof は式 e のバイト単位でのサイズを表します。
メンバのサイズが欲しいときには、 this オブジェクトは必要とされません:
struct S { int a; static int foo() { return a.sizeof; // 4を返す } } void test() { int x = S.a.sizeof; // x を 4 とする }
.sizeof がクラスオブジェクトに適用された場合、 インスタンスのサイズではなく、クラス参照のサイズを返します。
.alignof プロパティ
.alignof は式や型のalignmentのサイズを返します。 例えば、1 はバイト単位で整列されることを表し、 4 は32ビット単位で整列されることを表します。
.classinfo プロパティ
.classinfo はクラスオブジェクトの動的型情報を提供します。 object.TypeInfo_Class 型のインスタンスへの参照を返します。
ユーザー定義のクラス/構造体プロパティ
プロパティとは、 構文上はあたかもフィールドであるかのように扱えるメンバ関数のことです。 プロパティは読み取りも書き込みも可能です。 引数無しのメソッド呼び出しによって読み取りが行われ、 セットされる値を引数にしたメソッド呼び出しによって書き込みが行われます。
簡単なプロパティの例をあげます:
struct Foo { int data() { return m_data; } // 読み取りプロパティ int data(int value) { return m_data = value; } // 書き込みプロパティ private: int m_data; }
これを使うには:
int test() { Foo f; f.data = 3; // f.data(3); と同じ return f.data + 3; // return f.data() + 3; と同じ }
読み取りメソッドが存在しなければ、そのプロパティは書き込み専用になります。 書き込みメソッドが存在しなければ、そのプロパティは読み込み専用です。 複数の書き込みメソッドがあっても構いません。 通常の関数オーバーロードの規則によって、適切なものが選択されます。
この他の全ての点において、これらのメソッドは他のメソッドと同様に振る舞います。 static にすることも、別のリンケージを指定することも、 複数パラメタのメソッドと多重定義にすることも、アドレスをとることなども全て可能です。
注意: プロパティは現在の所、 op=, ++, -- 演算子のlvalueとすることはできません。