配列 (C++/CLI および C++/CX)Arrays (C++/CLI and C++/CX)

C++/CX の Platform::Array<T> 型、または C++/CLI の array キーワードは、指定された型と初期値の配列を宣言します。The Platform::Array<T> type in C++/CX, or the array keyword in C++/CLI, declares an array of a specified type and initial value.

すべてのプラットフォームAll Platforms

配列は、宣言内で終わり山かっこ (>) の後ろに、ハンドルへのオブジェクト (^) 修飾子を使用して宣言する必要があります。The array must be declared by using the handle-to-object (^) modifier after the closing angle bracket (>) in the declaration. 配列の要素の数は型の一部ではありません。The number of elements of the array is not part of the type. 1 つの配列変数で、異なるサイズの配列を参照できます。One array variable can refer to arrays of different sizes.

標準 C++ とは異なり、添字演算はポインターの算術演算と同義ではなく、交換可能ではありません。Unlike standard C++, subscripting is not a synonym for pointer arithmetic and is not commutative.

配列の詳細については、以下を参照してください。For more information about arrays, see:

Windows ランタイムWindows Runtime

配列は、Platform 名前空間のメンバーです。Arrays are members of the Platform namespace. 配列は、1 次元のみが可能です。Arrays can be only one-dimensional.

構文Syntax

構文の最初の例では、ref new 集計キーワードを使用して配列を割り当てます。The first example of the syntax uses the ref new aggregate keyword to allocate an array. 2 番目の例では、ローカル配列を宣言します。The second example declares a local array.

[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 [,...]}

qualifiersqualifiers
(省略可能) 1 つ以上の次のストレージ クラス指定子: mutablevolatileconstexternstatic(Optional) One or more of these storage class specifiers: mutable, volatile, const, extern, static.

array-typearray-type
配列変数の型。The type of the array variable. 有効な型は、Windows ランタイム クラスと基本型、ref クラスと構造体、値クラスと構造体、およびネイティブ ポインター (type*) です。Valid types are Windows Runtime classes and fundamental types, ref classes and structs, value classes and structs, and native pointers (type*).

rankrank
(省略可能) 配列の次元の数。(Optional) The number of dimensions of the array. 1 にする必要があります。Must be 1.

identifieridentifier
配列変数の名前。The name of the array variable.

initialization-typeinitialization-type
配列を初期化する値の型。The type of the values that initialize the array. 通常、array-typeinitialization-type には同じ型を指定します。Typically, array-type and initialization-type are the same type. ただし、initialization-type から array-type への変換がある場合は、異なる型を指定できます (たとえば initialization-typearray-type から派生する場合)。However, the types can be different if there is a conversion from initialization-type to array-type—for example, if initialization-type is derived from array-type.

initialization-listinitialization-list
(省略可能) 配列の要素を初期化する、中かっこ内のコンマ区切りの値の一覧。(Optional) A comma-delimited list of values in curly brackets that initialize the elements of the array. たとえば、rank-size-list(3) の場合 (3 つの要素の 1 次元配列を宣言しています)、initialization-list には {1,2,3} を指定できます。For example, if rank-size-list were (3), which declares a one-dimensional array of 3 elements, initialization list could be {1,2,3}.

解説Remarks

コンパイル時に、型が __is_ref_array(type) の参照カウント配列かどうかを検出できます。You can detect at compile time whether a type is a reference-counted array with __is_ref_array(type). 詳細については、「型の特徴のコンパイラ サポート」を参照してください。For more information, see Compiler Support for Type Traits.

要件Requirements

コンパイラ オプション: /ZWCompiler option: /ZW

使用例Examples

次の例では、100 個の要素がある 1 次元配列を作成します。The following example creates a one-dimensional array that has 100 elements.

// 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();
}

共通言語ランタイムCommon Language Runtime

構文Syntax

構文の最初の例では、gcnew キーワードを使用して配列を割り当てます。The first example of the syntax uses the gcnew keyword to allocate an array. 2 番目の例では、ローカル配列を宣言します。The second example declares a local array.

[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 [,...]}

qualifiersqualifiers
(省略可能) 次のストレージ クラス指定子 (1 つ以上): mutablevolatileconstexternstatic(Optional) One or more of these storage class specifiers: mutable, volatile, const, extern, static.

array-typearray-type
配列変数の型。The type of the array variable. 有効な型は、Windows ランタイム クラスと基本型、ref クラスと構造体、値クラスと構造体、ネイティブ ポインター (type*)、およびネイティブ POD (Plain Old Data) 型です。Valid types are Windows Runtime classes and fundamental types, ref classes and structs, value classes and structs, native pointers (type*), and native POD (plain old data) types.

rankrank
(省略可能) 配列の次元の数。(Optional) The number of dimensions of the array. 既定値は 1 です。最大値は 32 です。The default is 1; the maximum is 32. 配列の各次元そのものが配列です。Each dimension of the array is itself an array.

identifieridentifier
配列変数の名前。The name of the array variable.

initialization-typeinitialization-type
配列を初期化する値の型。The type of the values that initialize the array. 通常、array-typeinitialization-type には同じ型を指定します。Typically, array-type and initialization-type are the same type. ただし、initialization-type から array-type への変換がある場合は、異なる型を指定できます (たとえば initialization-typearray-type から派生する場合)。However, the types can be different if there is a conversion from initialization-type to array-type—for example, if initialization-type is derived from array-type.

rank-size-listrank-size-list
配列の各次元のサイズのコンマ区切りの一覧。A comma-delimited list of the size of each dimension in the array. または、initialization-list パラメーターが指定された場合は、コンパイラが各次元のサイズを推測できるため、rank-size-list は省略できます。Alternatively, if the initialization-list parameter is specified, the compiler can deduce the size of each dimension and rank-size-list can be omitted.

initialization-listinitialization-list
(省略可能) 配列の要素を初期化する、中かっこ内のコンマ区切りの値の一覧。(Optional) A comma-delimited list of values in curly brackets that initialize the elements of the array. または、多次元配列の要素を初期化する、入れ子になった initialization-list 項目のコンマ区切りの一覧。Or a comma-delimited list of nested initialization-list items that initialize the elements in a multi-dimensional array.

たとえば、rank-size-list(3) の場合 (3 つの要素の 1 次元配列を宣言しています)、initialization-list には {1,2,3} を指定できます。For example, if rank-size-list were (3), which declares a one-dimensional array of 3 elements, initialization list could be {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}}. を指定できます。If rank-size-list were (3,2,4), which declares a three-dimensional array of 3 elements in the first dimension, 2 elements in the second, and 4 elements in the third, initialization-list could be {{1,2,3},{0,0},{-5,10,-21,99}}.)

解説Remarks

配列は、プラットフォーム、既定、および cli 名前空間 にあります。array is in the Platform, default, and cli Namespaces namespace.

標準 C++ 同様、配列のインデックスはゼロから始まり、配列には角かっこ ([]) を使用して添え字を指定します。Like standard C++, the indices of an array are zero-based, and an array is subscripted by using square brackets ([]). 標準 C++ とは異なり、多次元配列のインデックスは、各次元に対する一連の角括弧 ([]) ではなく、各次元に対するインデックスの一覧で指定されます。Unlike standard C++, the indices of a multi-dimensional array are specified in a list of indices for each dimension instead of a set of square-bracket ([]) operators for each dimension. たとえば、identifier[index1][index2] ではなく、identifier[index1, index2] になります。For example, identifier[index1, index2] instead of identifier[index1][ index2].

すべてのマネージ配列は System::Array から継承します。All managed arrays inherit from System::Array. 配列変数に System::Array の任意のメソッドまたはプロパティを直接適用できます。Any method or property of System::Array can be applied directly to the array variable.

要素の型がポインターである配列をマネージ クラスに割り当てると、要素が 0 に初期化されます。When you allocate an array whose element type is pointer-to a managed class, the elements are 0-initialized.

要素の型が V, 型の値である配列を割り当てると、配列の各要素に V 用の既定のコンストラクタが適用されます。When you allocate an array whose element type is a value type V, the default constructor for V is applied to each array element. 詳細については、「C++ ネイティブ型と等価な .NET Framework ネイティブ型 (C++/CLI)」を参照してください。For more information, see .NET Framework Equivalents to C++ Native Types (C++/CLI).

コンパイル時に、型が __is_ref_array(type) の共通言語ランタイム (CLR) 配列かどうかを検出できます。At compile time, you can detect whether a type is a common language runtime (CLR) array with __is_ref_array(type). 詳細については、「型の特徴のコンパイラ サポート」を参照してください。For more information, see Compiler Support for Type Traits.

要件Requirements

コンパイラ オプション: /clrCompiler option: /clr

使用例Examples

次の例では、100 個の要素を持つ 1 次元配列と、最初の次元に 3 つの要素、2 番目の次元に 5 つの要素、および 3 番目の次元に 6 つの要素を持つ 3 次元配列を作成します。The following example creates a one-dimensional array that has 100 elements, and a three-dimensional array that has 3 elements in the first dimension, 5 elements in the second, and 6 elements in the third.

// 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();
}

関連項目See also

.NET および UWP でのコンポーネント拡張Component Extensions for .NET and UWP