配列 (C++/CLI および C++/CX)
C++/CX の Platform::Array<T>
型、または C++/CLI の array キーワードは、指定された型と初期値の配列を宣言します。
すべてのプラットフォーム
配列は、宣言内で終わり山かっこ (>) の後ろに、ハンドルへのオブジェクト (^) 修飾子を使用して宣言する必要があります。 配列の要素の数は型の一部ではありません。 1 つの配列変数で、異なるサイズの配列を参照できます。
標準 C++ とは異なり、添字演算はポインターの算術演算と同義ではなく、交換可能ではありません。
配列の詳細については、以下を参照してください。
Windows ランタイム
配列は、Platform
名前空間のメンバーです。 配列は、1 次元のみが可能です。
構文
構文の最初の例では、ref new 集計キーワードを使用して配列を割り当てます。 2 番目の例では、ローカル配列を宣言します。
[qualifiers] [Platform::]Array<[qualifiers] array-type [,rank]>^ identifier =
ref new[Platform::]Array<initialization-type> [{initialization-list [,...]}]
[qualifiers] [Platform::]Array<[qualifiers] array-type [,rank]>^ identifier =
{initialization-list [,...]}
qualifiers
(省略可能) 次のストレージ クラス指定子 (1 つ以上): mutable、volatile、const、extern、static。
array-type
配列変数の型。 有効な型は、Windows ランタイム クラスと基本型、ref クラスと構造体、値クラスと構造体、およびネイティブ ポインター (type*
) です。
rank
(省略可能) 配列の次元の数。 1 にする必要があります。
identifier
配列変数の名前。
initialization-type
配列を初期化する値の型。 通常、array-type と initialization-type には同じ型を指定します。 ただし、initialization-type から array-type への変換がある場合は、異なる型を指定できます (たとえば initialization-type が array-type から派生する場合)。
initialization-list
(省略可能) 配列の要素を初期化する、中かっこ内のコンマ区切りの値の一覧。 たとえば、rank-size-list が (3)
の場合 (3 つの要素の 1 次元配列を宣言しています)、initialization-list には {1,2,3}
を指定できます。
解説
コンパイル時に、型が __is_ref_array(type)
の参照カウント配列かどうかを検出できます。 詳細については、「型の特徴のコンパイラ サポート」を参照してください。
要件
コンパイラ オプション: /ZW
例
次の例では、100 個の要素がある 1 次元配列を作成します。
// cwr_array.cpp
// compile with: /ZW
using namespace Platform;
ref class MyClass {};
int main() {
// one-dimensional array
Array<MyClass^>^ My1DArray = ref new Array<MyClass^>(100);
My1DArray[99] = ref new MyClass();
}
共通言語ランタイム
構文
構文の最初の例では、gcnew キーワードを使用して配列を割り当てます。 2 番目の例では、ローカル配列を宣言します。
[qualifiers] [cli::]array<[qualifiers] array-type [,rank]>^ identifier =
gcnew [cli::]array<initialization-type[,rank]>(rank-size-list[,...]) [{initialization-list [,...]}]
[qualifiers] [cli::]array<[qualifiers] array-type [,rank]>^ identifier =
{initialization-list [,...]}
qualifiers
(省略可能) 次のストレージ クラス指定子 (1 つ以上): mutable、volatile、const、extern、static。
array-type
配列変数の型。 有効な型は、Windows ランタイム クラスと基本型、ref クラスと構造体、値クラスと構造体、ネイティブ ポインター (type*
)、およびネイティブ POD (Plain Old Data) 型です。
rank
(省略可能) 配列の次元の数。 既定値は 1 です。最大値は 32 です。 配列の各次元そのものが配列です。
identifier
配列変数の名前。
initialization-type
配列を初期化する値の型。 通常、array-type と initialization-type には同じ型を指定します。 ただし、initialization-type から array-type への変換がある場合は、異なる型を指定できます (たとえば initialization-type が array-type から派生する場合)。
rank-size-list
配列の各次元のサイズのコンマ区切りの一覧。 または、initialization-list パラメーターが指定された場合は、コンパイラが各次元のサイズを推測できるため、rank-size-list は省略できます。
initialization-list
(省略可能) 配列の要素を初期化する、中かっこ内のコンマ区切りの値の一覧。 または、多次元配列の要素を初期化する、入れ子になった initialization-list 項目のコンマ区切りの一覧。
たとえば、rank-size-list が (3)
の場合 (3 つの要素の 1 次元配列を宣言しています)、initialization-list には {1,2,3}
を指定できます。 rank-size-list が (3,2,4)
の場合 (最初の次元に 3 つの要素、2 番目の次元に 2 つの要素、3 番目の要素に 4 つの要素を宣言しています)、initialization-list には {{1,2,3},{0,0},{-5,10,-21,99}}
. を指定できます。
解説
配列は、プラットフォーム、既定、および cli 名前空間 にあります。
標準 C++ 同様、配列のインデックスはゼロから始まり、配列には角かっこ ([]) を使用して添え字を指定します。 標準 C++ とは異なり、多次元配列のインデックスは、各次元に対する一連の角括弧 ([]) ではなく、各次元に対するインデックスの一覧で指定されます。 たとえば、identifier[index1][index2] ではなく、identifier[index1, index2] になります。
すべてのマネージ配列は System::Array
から継承します。 配列変数に System::Array
の任意のメソッドまたはプロパティを直接適用できます。
要素の型がポインターである配列をマネージ クラスに割り当てると、要素が 0 に初期化されます。
要素の型が V
, 型の値である配列を割り当てると、配列の各要素に V
用の既定のコンストラクタが適用されます。 詳細については、「C++ ネイティブ型と等価な .NET Framework ネイティブ型 (C++/CLI)」を参照してください。
コンパイル時に、型が __is_ref_array(type)
の共通言語ランタイム (CLR) 配列かどうかを検出できます。 詳細については、「型の特徴のコンパイラ サポート」を参照してください。
要件
コンパイラ オプション: /clr
例
次の例では、100 個の要素を持つ 1 次元配列と、最初の次元に 3 つの要素、2 番目の次元に 5 つの要素、および 3 番目の次元に 6 つの要素を持つ 3 次元配列を作成します。
// clr_array.cpp
// compile with: /clr
ref class MyClass {};
int main() {
// one-dimensional array
array<MyClass ^> ^ My1DArray = gcnew array<MyClass ^>(100);
My1DArray[99] = gcnew MyClass();
// three-dimensional array
array<MyClass ^, 3> ^ My3DArray = gcnew array<MyClass ^, 3>(3, 5, 6);
My3DArray[0,0,0] = gcnew MyClass();
}