英語版
このページの英語版を見る

core.internal.array.construction

このモジュールには、動的配列を構築するためのコンパイラサポートが含まれている
License:
Distributed under the Boost Software License 1.0. (See accompanying file LICENSE)
@trusted Tarr _d_arrayctor(Tarr : T[], T)(return scope Tarr to, scope Tarr from, char* makeWeaklyPure = null);
同じ要素型の別の配列から配列の初期化(代入ではない)を行う。
Parameters:
Tarr to どの配列を初期化するか
Tarr from 配列を初期化するデータ。
char* makeWeaklyPure この関数の目的は、関数が強く純粋になり、最適化されなくなる危険を防ぐことである。 その目的は、関数が強く純粋になり、最適化されなくなる危険を防ぐことである。
Returns:
作成され初期化された配列 to
Bugs:
この"関数テンプレート化された関数"は、安全性チェックをバイパスする、かなり古いランタイムフックから移植されたものである、 を迂回する。既存のコードを壊さないようにするため、この関数テンプレートは、実装が最新のD言語に対応するまで、一時的に。 を一時的に@trusted
第3パラメータは使われることはないが、関数を強く純粋ではなく弱く純粋に扱うために必要である。 関数を強く純粋ではなく弱く純粋に扱うために必要である。 これが必要なのは、以下のような構文が によって無視されるからである。 _d_arrayctorへの呼び出しが純粋であることを意味するからである。 への呼び出しは何の効果も持たない(副作用もない)。 _d_arrayctorへの呼び出しは何の効果も持たない(副作用もなく というのも、a の内容が実際に変更されているにもかかわらず、この呼び出しには何の影響もない(副作用もなく、戻り値も無視される)ことを意味するからである。 const S[2] b; const S[2] a = b; // これはd_arrayctor(a, b)に格下げされる。
@trusted void _d_arraysetctor(Tarr : T[], T)(scope Tarr p, ref scope T value);
配列の構築を行う。 ti[count] p = value;
Parameters:
Tarr p どの配列を初期化するか
T value どのデータで配列を構築するか
Bugs:
この"関数テンプレート化された関数"は、安全性をバイパスするかなり古いランタイムフックから移植されたものである、 をバイパスする古いランタイムフックから移植された。既存のコードを壊さないようにするため、この関数テンプレート を一時的に@trusted
pure nothrow @trusted T[] _d_newarrayUPureNothrow(T)(size_t length, bool isShared = false);

@trusted T[] _d_newarrayT(T)(size_t length, bool isShared = false);
ガベージコレクタで配列をアロケートする。また もしその型にイニシャライザーがあれば、要素もイニシャライズする。そうでない場合は、配列をゼロ初期化しない。
3つのバリエーションがある: _d_newarrayU 要素を初期化しない _d_newarrayT要素を0に初期化するか、イニシャライザに基づいて初期化する。
Parameters:
size_t length .lengthに基づいて初期化される。
Returns:
新しく確保された配列
@trusted Tarr _d_newarraymTX(Tarr : U[], T, U)(size_t[] dims, bool isShared = false);
新しい多次元配列を作成する。要素の型にイニシャライザがある場合は、要素もイニシャライズする。 そうでない場合は、配列をゼロ初期化しない。
void main()
{
    S[][] s = new S[][](2, 3)

    // 低下:
    S[] s = _d_newarraymTX!(S[][], S)([2, 3]);
}
Parameters:
size_t[] dims 各次元の配列の長さを指定する。
bool isShared 配列を共有するかどうか。
Returns:
新しく確保された配列