Matrices (C++/CLI y C++/CX)
El tipo Platform::Array<T>
en C++/CX, o la palabra clave array en C++/CLI, declara una matriz de un tipo y valor inicial especificados.
Todas las plataformas
La matriz debe declararse con el modificador de identificador de objeto (^) después del corchete angular de cierre (>) en la declaración. El número de elementos de la matriz no es parte del tipo. Una matriz puede hacer referencia a matrices de distintos tamaños.
A diferencia de C++ estándar, los subíndices no son sinónimo de aritmética de puntero y no son conmutativos.
Para más información sobre las matrices, consulte:
Windows en tiempo de ejecución
Las matrices son miembros del espacio de nombres Platform
. Las matrices solo pueden ser unidimensionales.
Sintaxis
En el primer ejemplo de la sintaxis se usa la palabra clave agregada ref new para asignar una matriz. En el segundo ejemplo se declara una 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 [,...]}
qualifiers
(Opcional) Uno o varios de estos especificadores de clase de almacenamiento: mutable, volatile, const, extern, static.
array-type
El tipo de la variable de matriz. Los tipos válidos son clases y tipos fundamentales de Windows Runtime, clases de referencia y structs, clases de valor y structs y punteros nativos (type*
).
rank
(Opcional) El número de dimensiones de la matriz. Debe ser 1.
identifier
El nombre de la variable de matriz.
initialization-type
El tipo de los valores que inicializan la matriz. Por lo general, array-type y initialization-type son el mismo tipo. Sin embargo, los tipos pueden ser diferentes si hay una conversión de initialization-type a array-type;por ejemplo, si initialization-type se deriva de array-type.
initialization-list
(Opcional) Una lista delimitada por comas de valores entre llaves que inicializan los elementos de la matriz. Por ejemplo, si rank-size-list fuera (3)
, que declara una matriz unidimensional de 3 elementos, initialization list podría ser {1,2,3}
.
Comentarios
Puede detectar en tiempo de compilación si un tipo es una matriz con recuento de referencias con __is_ref_array(type)
. Para más información, consulte Compatibilidad del compilador con rasgos de tipo.
Requisitos
Opción del compilador: /ZW
Ejemplos
En el ejemplo siguiente se crea una matriz unidimensional que tiene 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
Sintaxis
En el primer ejemplo de la sintaxis se usa la palabra clave gcnew para asignar una matriz. En el segundo ejemplo se declara una 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 [,...]}
qualifiers
(Opcional) Uno o varios de estos especificadores de clase de almacenamiento: mutable, volatile, const, extern, static.
array-type
El tipo de la variable de matriz. Los tipos válidos son clases y tipos fundamentales de Windows Runtime, clases de referencia y structs, clases de valores y structs, punteros nativos (type*
) y tipos de POD (Plain Old Data) nativos.
rank
(Opcional) El número de dimensiones de la matriz. El valor predeterminado es 1; el máximo es 32. Cada dimensión de la matriz es en sí misma una matriz.
identifier
El nombre de la variable de matriz.
initialization-type
El tipo de los valores que inicializan la matriz. Por lo general, array-type y initialization-type son el mismo tipo. Sin embargo, los tipos pueden ser diferentes si hay una conversión de initialization-type a array-type;por ejemplo, si initialization-type se deriva de array-type.
rank-size-list
Una lista delimitada por comas del tamaño de cada dimensión de la matriz. Como alternativa, si se especifica el parámetro initialization-list, el compilador puede deducir el tamaño de cada dimensión y se puede omitir rank-size-list.
initialization-list
(Opcional) Una lista delimitada por comas de valores entre llaves que inicializan los elementos de la matriz. O bien, una lista delimitada por comas de elementos initialization-list anidados que inicializan los elementos de en matriz multidimensional.
Por ejemplo, si rank-size-list fuera (3)
, que declara una matriz unidimensional de 3 elementos, initialization list podría ser {1,2,3}
. Si rank-size-list fuera (3,2,4)
, que declara una matriz tridimensional de 3 elementos en la primera dimensión, 2 elementos en la segunda y 4 elementos en la tercera, initialization-list podría ser {{1,2,3},{0,0},{-5,10,-21,99}}
).
Comentarios
array se encuentra en el espacio de nombres de Espacios de nombres de plataforma, predeterminado y CLI.
Como en C++ estándar, los índices de una matriz se basan en cero, y se aplican subíndices a una matriz mediante corchetes ([]). A diferencia de C++ estándar, los índices de una matriz multidimensional se especifican en una lista de índices para cada dimensión, en lugar de en un conjunto de operadores de corchetes ([]) para cada dimensión. Por ejemplo, identifier[index1, index2] en lugar de identifier[index1][ index2].
Todas las matrices administradas heredan de System::Array
. Cualquier método o propiedad de System::Array
puede aplicarse directamente a la variable de matriz.
Cuando asigne una matriz cuyo tipo de elemento sea un puntero a una clase administrada, los elementos se inicializan en 0.
Cuando asigne una matriz cuyo tipo de elemento sea un tipo de valor V
, se aplica el constructor predeterminado de V
a cada elemento de matriz. Para más información, consulte Equivalentes de .NET Framework para tipos nativos de C++.
En tiempo de compilación, puede detectar si un tipo es una matriz de Common Language Runtime (CLR) con __is_ref_array(type)
. Para más información, consulte Compatibilidad del compilador con rasgos de tipo.
Requisitos
Opción del compilador: /clr
Ejemplos
En el ejemplo siguiente se crea una matriz unidimensional que tiene 100 elementos y una matriz tridimensional que tiene 3 elementos en la primera dimensión, 5 elementos en la segunda y 6 elementos en la tercera.
// 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();
}