分享方式:


陣列 (C++/CLI 和 C++/CX)

C++/CX 中的 Platform::Array<T> 型別或 C++/CLI 中的 array 關鍵字會宣告指定型別和初始值的陣列。

所有平台

陣列必須在宣告的右角括弧 (^) 後面使用句柄對物件 (>^) 修飾詞來宣告。 陣列的元素數目不是型別的一部分。 一個陣列變數可以參考不同大小的陣列。

不同於標準 C++,註標不是指標算術的同義字且不可交換。

如需陣列的詳細資訊,請參閱:

Windows 執行階段

陣列是 Platform 命名空間的成員。 陣列可以只有一維。

語法

第一個語法範例會使用 ref new 彙總關鍵字來配置陣列。 第二個範例會宣告本機陣列。

[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
(選擇性) 下列一或多個儲存類別規範:mutablevolatileconstexternstatic

array-type
陣列變數的型別。 有效型別為 Windows 執行階段類別和基本型別、ref 類別和結構、實值類別和結構,以及原生指標 (type*)。

rank
(選擇性) 陣列的維度數目。 必須是 1。

識別碼
陣列變數的名稱。

initialization-type
將陣列初始化的實值型別。 通常 array-typeinitialization-type 是同一個型別。 不過,如果要從 initialization-type 轉換為 array-type,型別就會不一樣:例如,若 initialization-type 衍生自 array-type

initialization-list
(選擇性) 大括號中以逗號分隔的值清單,其會將陣列的元素初始化。 例如,如果 rank-size-list(3) (其會宣告含 3 個元素的一維陣列),則 initialization list 可能是 {1,2,3}

備註

您可以在編譯時間使用 __is_ref_array(type) 來偵測型別是否為參考計數陣列。 如需詳細資訊,請參閱類型特徵的編譯器支援

需求

編譯器選項:/ZW

範例

下列範例會建立含 100 個元素的一維陣列。

// 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 關鍵字來配置陣列。 第二個範例會宣告本機陣列。

[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
(選擇性) 下列一或多個儲存類別規範:mutablevolatileconstexternstatic

array-type
陣列變數的型別。 有效型別為 Windows 執行階段類別和基本型別、ref 類別和結構、實值類別和結構、原生指標 (type*),以及原生 POD (Plain Old Data) 型別。

rank
(選擇性) 陣列的維度數目。 預設值為 1;最大值為 32。 陣列的每個維度本身就是一個陣列。

識別碼
陣列變數的名稱。

initialization-type
將陣列初始化的實值型別。 通常 array-typeinitialization-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 個元素的一維陣列),則 initialization list 可能是 {1,2,3}。 如果 rank-size-list(3,2,4) (其會宣告一個三維陣列:第一個維度中有 3 個元素、第二個維度中有 2 個元素,且第三個元素中有 4 個元素),則 initialization-list 可能是 {{1,2,3},{0,0},{-5,10,-21,99}}

備註

array 位於平台、預設與 cli 命名空間的命名空間。

如同標準 C++,陣列的索引會以零起始,而陣列會使用方括號 ([]) 來註標。 與標準 C++ 不同,多維度陣列的索引會指定於每個維度的索引清單中,而非每個維度的一組方括弧 ([]) 運算子內。 例如,identifier[index1, index2],而非 identifier[index1][ index2]。

所有受控陣列都繼承自 System::ArraySystem::Array 的任何方法或屬性都可直接套用至陣列變數。

當您配置元素型別指向受控類別的陣列時,會將元素初始化為 0。

當您配置元素型別為實值型別 V 的陣列時,會將 V 的預設建構函式套用至每個陣列元素。 如需詳細資訊,請參閱 C++ 原生型別的 .NET Framework 對應項 (C++/CLI)

在編譯時間,您可以使用 __is_ref_array(type) 來偵測型別是否為 Common Language Runtime (CLR) 陣列。 如需詳細資訊,請參閱類型特徵的編譯器支援

需求

編譯器選項:/clr

範例

下列範例會建立一個含 100 個元素的一維陣列,以及一個三維陣列 (第一個維度中有 3 個元素、第二個維度中有 5 個元素,且第三個維度中有 6 個元素)。

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

另請參閱

適用於.NET 和 UWP 的元件延伸模組