Matrici (C++/CLI e C++/CX)

Il tipo Platform::Array<T> in C++/CX o la parola chiave array in C++/CLI dichiara una matrice di un tipo specificato e un valore iniziale.

Tutte le piattaforme

La matrice deve essere dichiarata usando il modificatore handle-to-object (^) dopo la parentesi uncinata chiusa (>) nella dichiarazione. Il numero di elementi della matrice non fa parte del tipo. Una variabile di matrice può fare riferimento a matrici di dimensioni diverse.

Diversamente da C++ standard, l'indice non è un sinonimo di aritmetica dei puntatori e non è commutativo.

Per altre informazioni sulle matrici, vedere:

Windows Runtime

Le matrici sono membri dello spazio dei nomi Platform. Le matrici possono essere solo unidimensionali.

Sintassi

Il primo esempio della sintassi usa la parola chiave aggregata ref new per allocare una matrice. Il secondo esempio dichiara una matrice locale.

[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
(Facoltativo) Uno o più di questi identificatori di classe di archiviazione: mutable, volatile, const, extern, static.

array-type
Tipo della variabile di matrice. I tipi validi sono le classi e i tipi fondamentali di Windows Runtime, classi e struct di riferimento e puntatori nativi (type*).

rank
(Facoltativo) Numero di dimensioni nella matrice. Deve essere 1.

identificatore
Nome della variabile di matrice.

initialization-type
Tipo dei valori che inizializzano la matrice. In genere array-type e initialization-type sono lo stesso tipo. Tuttavia, i tipi possono essere diversi in caso di conversione da initialization-type ad array-type, ad esempio, se initialization-type viene derivato da array-type.

initialization-list
(Facoltativo) Elenco delimitato da virgole di valori tra parentesi graffe che inizializzano gli elementi della matrice. Ad esempio, se rank-size-list è (3), che dichiara una matrice unidimensionale di 3 elementi, initialization-list può essere {1,2,3}.

Osservazioni:

È possibile rilevare in fase di compilazione se un tipo è una matrice con conteggio dei riferimenti tramite __is_ref_array(type). Per altre informazioni, vedere Supporto del compilatore per caratteristiche di tipo.

Requisiti

Opzione del compilatore: /ZW

Esempi

L'esempio seguente crea una matrice unidimensionale che contiene 100 elementi.

// 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

Sintassi

Il primo esempio della sintassi usa la parola chiave gcnew per allocare una matrice. Il secondo esempio dichiara una matrice locale.

[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
(Facoltativo) Uno o più di questi identificatori di classe di archiviazione: mutable, volatile, const, extern, static.

array-type
Tipo della variabile di matrice. I tipi validi sono classi e tipi fondamentali di Windows Runtime, classi e struct di riferimento, classi e struct di valore, puntatori nativi (type*) e tipi POD (dati non aggiornati) nativi.

rank
(Facoltativo) Numero di dimensioni nella matrice. Il valore predefinito è 1, il valore massimo è 32. Ogni dimensione della matrice è a sua volta una matrice.

identificatore
Nome della variabile di matrice.

initialization-type
Tipo dei valori che inizializzano la matrice. In genere array-type e initialization-type sono lo stesso tipo. Tuttavia, i tipi possono essere diversi in caso di conversione da initialization-type ad array-type, ad esempio, se initialization-type viene derivato da array-type.

rank-size-list
Elenco delimitato da virgole delle dimensioni di ogni dimensione nella matrice. In alternativa, se è specificato il parametro initialization-list, il compilatore può dedurre le dimensioni e rank-size-list può essere omesso.

initialization-list
(Facoltativo) Elenco delimitato da virgole di valori tra parentesi graffe che inizializzano gli elementi della matrice. O un elenco delimitato da virgole di elementi initialization-list annidati che inizializzano gli elementi in una matrice multidimensionale.

Ad esempio, se rank-size-list è (3), che dichiara una matrice unidimensionale di 3 elementi, initialization-list può essere {1,2,3}. Se rank-size-list è (3,2,4), che dichiara una matrice tridimensionale di 3 elementi nella prima dimensione, 2 elementi nella seconda e 4 elementi nella terza, initialization-list può essere {{1,2,3},{0,0},{-5,10,-21,99}}.

Osservazioni:

array si trova negli spazi dei nomi platform, default e cli.

Come in C++ standard, gli indici di una matrice sono a base zero e una matrice viene impostata con indice usando le parentesi quadre ([]). A differenza di C++ standard, gli indici di una matrice multidimensionale vengono specificati in un elenco di indici per ogni dimensione anziché in un set di operatori parentesi quadra ([]) per ogni dimensione. Ad esempio, identifier[indice1, indice2] invece di identifier[indice1] [indice2].

Tutte le matrici gestite ereditano da System::Array. Qualsiasi metodo o proprietà di System::Array può essere applicato direttamente alla variabile di matrice.

Quando si alloca una matrice il cui tipo di elemento è puntatore a una classe gestita, gli elementi sono inizializzati da 0.

Quando si alloca una matrice il cui tipo di elemento è un tipo valore V, il costruttore predefinito per V viene applicato a ogni elemento della matrice. Per altre informazioni, vedere Equivalenti di .NET Framework a tipi nativi C++ (C++/CLI).

In fase di compilazione è possibile rilevare se un tipo è una matrice Common Language Runtime (CLR) tramite __is_ref_array(type). Per altre informazioni, vedere Supporto del compilatore per caratteristiche di tipo.

Requisiti

Opzione del compilatore: /clr

Esempi

L'esempio seguente crea una matrice unidimensionale che contiene 100 elementi e una matrice tridimensionale che contiene 3 elementi nella prima dimensione, 5 elementi nella seconda e 6 elementi nella terza.

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

Vedi anche

Estensioni componenti per .NET e UWP