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