プロパティ
すべてのシンボル、型、式には問い合わせ可能なプロパティがある。
Property | Description |
---|---|
.init | 初期化子 |
.sizeof | サイズ(バイト単位 |
.alignof | 整列サイズ |
.mangleof | "型"の文字列による「文字化け」表現 |
.stringof | 型のソース表現を表す文字列 |
Expression | Value |
---|---|
int.sizeof | 4を返す |
(3).sizeof | 4 を返す (3 は int であるため) |
int.init | 0を返す |
int.mangleof | 文字列「i」を返す |
int.stringof | 文字列「int」を返す |
(1+2).stringof | 文字列「1 + 2」を返す |
Property | Description |
---|---|
.max | 最大値 |
.min | 最小値 |
Property | Description |
---|---|
.infinity | 無限大の値 |
.nan | NaN -Not a Number値 (他の NaN 値も生成可能) |
.dig | 小数桁の精度の数 |
.epsilon | 値1への最小増分 |
.mant_dig | 仮数部のビット数 |
.max_10_exp | 10が表現可能な最大整数値max_10_exp表現できる |
.max_exp | 2が表現できる最大整数値max_exp-1表現できる |
.min_10_exp | 10がmin_10_exp正規化された値として表現できる最小のint値 |
.min_exp | 最小のint値で、2がmin_exp-1正規化された値として表現できる最小の整数値 |
.max | 無限大ではない最大の表現可能な値 |
.min_normal | 最小の表現可能な正規化値で、かつ0ではないもの |
.re | 実数部 |
.im | 虚数部 |
Expression | Value |
---|---|
float.nan | 浮動小数点NaN値を生成する |
(2.5F).nan | 浮動小数点NaN値を生成する |
参照:
.initプロパティは
.init デフォルト初期化子である定数式を生成する。 型に適用された場合、その型に対するデフォルト初期化子となる。 変数またはフィールドに適用された場合、その 変数またはフィールドの型に対するデフォルト初期化子となる。 異なる種類の型のデフォルト値については、以下で説明する。
Type | .init Value |
---|---|
char | '\xff' |
dchar | '\xffff' |
wchar | '\xffff' |
列挙型 | 最初のメンバー値 |
整数 | 0 |
浮動小数点数 | NaN |
参照型 | null |
構造体 | 各フィールドのデフォルト値 |
共用体 | 最初のメンバ値 |
int a; int b = 1; static assert(int.init == 0); static assert(a.init == 0); static assert(b.init == 0); struct Foo { int a; int b = 7; } static assert(Foo.init.a == 0); static assert(Foo.init.b == 7);
.init はデフォルトで初期化されたオブジェクトを生成し、デフォルトで構築されたオブジェクトではないことに注意すること。 オブジェクトにデフォルトのコンストラクタがある場合、 異なる値が生成される可能性がある。
- T がネストされた構造体である場合、T.init内のコンテキストポインタは null となる。
- T が@disable this(); を持つ構造体である場合、T.initは 論理的に不正なオブジェクトを返す可能性がある。
void main() { int x; struct S { void foo() { x = 1; } // コンテキスト・ポインタを介して、囲みスコープ内のxにアクセスする } S s1; // OK、S()はコンテキスト・ポインタを正しく初期化する。 S s2 = S(); // OK、s1と同じである S s3 = S.init; // Bad. s3のコンテキスト・ポインタはnullである s3.foo(); // アクセス違反 }
struct S { int x; @disable this(); this(int n) { x = n; } invariant { assert(x > 0); } void check() {} } void main() { //S s1; // エラー: 変数s1のイニシャライザはS型に必要である //S s2 = S(); //エラー: コンストラクタS.thisは呼び出せない // アノテーションが@disableであるためである S s3 = S.init; // Bad. s3.x == 0であり、Sの不変量に違反する s3.check(); // アサーション失敗 }
.stringof プロパティは
.stringof 定数文字列を生成し、 そのプレフィックスのソース表現となる。 型に適用された場合、その型の文字列となる。 式に適用された場合、その式のソース表現となる。 式は評価されない。
module test; import std.stdio; struct Dog { } enum Color { Red } int i = 4; void main() { writeln((1+2).stringof); // "1 + 2" writeln(Dog.stringof); // "Dog" writeln(test.Dog.stringof); // "Dog" writeln(int.stringof); // "int" writeln((int*[5][]).stringof); // "int*[5][]" writeln(Color.Red.stringof); // "Red" writeln((5).stringof); // "5" writeln((++i).stringof); // "i += 1" writeln(i); // 4 }
.sizeof プロパティ
e.sizeof 式のバイト単位のサイズを返す 。 e
メンバのサイズを取得する際には、 このオブジェクトが存在している必要はない。
struct S { int a; static int foo() { return a.sizeof; // 4を返却する } } void test() { int x = S.a.sizeof; // xを4に設定する }
.sizeof クラスオブジェクトに適用された場合、 クラス参照のサイズが返され、クラスインスタンスのサイズは返されない。
.alignof プロパティは
.alignof 式または型の整列サイズを返す。 たとえば、整列サイズが1の場合はバイト境界で整列されていることを意味し、 4の場合は32ビット境界で整列されていることを意味する。
.mangleof プロパティ
文字化けとは、生成されたオブジェクトファイルでシンボルがテキスト形式でどのように表現されるかを指す。.mangleof は、 適用された型またはシンボルの表現の文字列リテラルを返す。 Dリンクの型とシンボルの文字化けは、 名前の文字化けで定義されている。
- シンボルに先頭のアンダースコアが追加されるかどうか
- 非Dリンク時における型およびシンボルのマングリング。 CおよびC++リンク時では、これは通常、 関連するCまたはC++コンパイラの動作と一致する。
.classinfo プロパティは
.classinfo クラスオブジェクトの動的型に関する情報を提供します。 型への参照を返します。 object.TypeInfo_Class。
.classinfo インターフェースに適用されたものは、 インターフェースに関する情報を提供し、それがインスタンスである可能性のあるクラスに関するものではない。
ユーザー定義プロパティ
ユーザー定義のプロパティは、プロパティ関数を使用して作成できる。
DEEPL APIにより翻訳、ところどころ修正。
このページの最新版(英語)
このページの原文(英語)
翻訳時のdmdのバージョン: 2.109.1
ドキュメントのdmdのバージョン: 2.109.1
翻訳日付 :
HTML生成日時:
編集者: dokutoku