Arrays (C++/CLI e C++/CX)
O tipo Platform::Array<T>
em C++/CX, ou a palavra-chave array em C++/CLI, declara uma matriz de um tipo especificado e o valor inicial.
Todas as plataformas
A matriz deve ser declarada usando o modificador handle-to-object (^) após o colchete angular de fechamento (>) na declaração. O número de elementos da matriz não faz parte do tipo. Uma variável de matriz pode fazer referência a matrizes de tamanhos diferentes.
Ao contrário do C++ padrão, a subscrição não é um sinônimo para aritmética de ponteiro, e não é cumulativa.
Saiba mais sobre matrizes em:
Windows Runtime
As matrizes são membros do namespace Platform
. As matrizes só podem ser unidimensionais.
Sintaxe
O primeiro exemplo da sintaxe usa a palavra-chave agregada ref new para alocar uma matriz. O segundo exemplo declara uma matriz local.
[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 [,...]}
qualificadores
(Opcional) Um ou mais destes especificadores de classe de armazenamento: mutable, volatile, const, extern, static.
array-type
O tipo de variável da matriz. Os tipos válidos são classes do Windows Runtime e tipos fundamentais, classes e structs ref, classes e structs value e ponteiros nativos (type*
).
rank
(Opcional) O número de dimensões da matriz. Deve ser 1.
identificador
O nome da variável da matriz.
initialization-type
O tipo dos valores que inicializam a matriz. Normalmente, array-type e initialization-type são do mesmo tipo. No entanto, os tipos podem ser diferentes se houver uma conversão de initialization-type para array-type, por exemplo, se initialization-type deriva array-type.
initialization-list
(Opcional) Uma lista delimitada por vírgulas de valores entre colchetes que inicializam os elementos da matriz. Por exemplo, se rank-size-list fosse (3)
, o que declara uma matriz unidimensional de três elementos, initialization list poderia ser {1,2,3}
.
Comentários
Você pode detectar no tempo de compilação se um tipo é uma matriz de contagem de referência com __is_ref_array(type)
. Saiba mais em Suporte para compilador de traços de tipo.
Requisitos
Opção do compilador: /ZW
Exemplos
O exemplo a seguir cria uma matriz unidimensional com 100 elementos.
// 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
Sintaxe
O primeiro exemplo da sintaxe usa a palavra-chave gcnew para alocar uma matriz. O segundo exemplo declara uma matriz local.
[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 [,...]}
qualificadores
(Opcional) Um ou mais destes especificadores de classe de armazenamento: mutable, volatile, const, extern, static.
array-type
O tipo de variável da matriz. Os tipos válidos são classes do Windows Runtime e tipos fundamentais, classes ref e structs, classes de valor e structs, ponteiros nativos (type*
) e tipos POD (dados antigos simples) nativos.
rank
(Opcional) O número de dimensões da matriz. O padrão é 1; o máximo é 32. Cada dimensão da matriz é, por si só, uma matriz.
identificador
O nome da variável da matriz.
initialization-type
O tipo dos valores que inicializam a matriz. Normalmente, array-type e initialization-type são do mesmo tipo. No entanto, os tipos podem ser diferentes se houver uma conversão de initialization-type para array-type, por exemplo, se initialization-type deriva array-type.
rank-size-list
Uma lista delimitada por vírgula do tamanho de cada dimensão na matriz. Como alternativa, se o parâmetro initialization-list for especificado, o compilador poderá deduzir o tamanho de cada dimensão e rank-size-list poderá ser omitido.
initialization-list
(Opcional) Uma lista delimitada por vírgulas de valores entre colchetes que inicializam os elementos da matriz. Ou uma lista delimitada por vírgulas de itens initialization-list aninhados que inicializam os elementos em uma matriz multidimensional.
Por exemplo, se rank-size-list fosse (3)
, o que declara uma matriz unidimensional de três elementos, initialization list poderia ser {1,2,3}
. Se rank-size-list fosse (3,2,4)
, o que declara uma matriz tridimensional de três elementos na primeira dimensão, dois elementos na segunda e quatro elementos na terceira, initialization-list poderia ser {{1,2,3},{0,0},{-5,10,-21,99}}
).
Comentários
array está no namespace Plataform, default e cli.
Como o C++ padrão, os índices de uma matriz têm base em zero e uma matriz é subscrita usando colchetes ([]). Ao contrário do C++ padrão, os índices de uma matriz multidimensional são especificados em uma lista de índices para cada dimensão, em vez de um conjunto de operadores de colchete ([]) para cada dimensão. Por exemplo, identifier[index1, index2], em vez de identifier[index1] [ index2].
Todas as matrizes gerenciadas herdam de System::Array
. Qualquer método ou propriedade de System::Array
pode ser aplicado diretamente na variável da matriz.
Quando você aloca uma matriz, cujo tipo de elemento é o ponteiro, para uma classe gerenciada, os elementos são inicializados para 0.
Quando você aloca uma matriz cujo tipo de elemento é um tipo de valor V
, o construtor padrão para V
é aplicado a cada elemento da matriz. Saiba mais em Equivalentes do .NET Framework aos tipos nativos do C++ (C++/CLI).
Em tempo de compilação, você pode detectar se um tipo é uma matriz CLR (common language runtime) com __is_ref_array(type)
. Saiba mais em Suporte para compilador de traços de tipo.
Requisitos
Opção do compilador: /clr
Exemplos
O exemplo a seguir cria uma matriz unidimensional que tem 100 elementos e uma matriz tridimensional que tem três elementos na primeira dimensão, cinco elementos na segunda e seis elementos na terceira.
// 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();
}