Tablice (C++/CLI i C++/CX)
Typ Platform::Array<T>
w języku C++/CX lub słowo kluczowe tablicy w języku C++/CLI deklaruje tablicę określonego typu i wartości początkowej.
Wszystkie platformy
Tablica musi być zadeklarowana przy użyciu modyfikatora handle-to-object (^) po nawiasie zamykającym (>) w deklaracji . Liczba elementów tablicy nie jest częścią typu. Jedna zmienna tablicowa może odwoływać się do tablic o różnych rozmiarach.
W przeciwieństwie do standardowego języka C++, indeks dolny nie jest synonimem arytmetyki wskaźnika i nie jest przemijający.
Aby uzyskać więcej informacji na temat tablic, zobacz:
Środowisko wykonawcze systemu Windows
Tablice są elementami członkowskimi Platform
przestrzeni nazw. Tablice mogą być tylko jednowymiarowe.
Składnia
Pierwszy przykład składni używa nowego zagregowanego słowa kluczowego ref do przydzielenia tablicy. Drugi przykład deklaruje tablicę lokalną.
[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 [,...]}
Kwalifikatory
(Opcjonalnie) Co najmniej jeden z tych specyfikatorów klasy magazynu: modyfikowalny, lotny, const, extern, statyczny.
typ tablicy
Typ zmiennej tablicowej. Prawidłowe typy to środowisko wykonawcze systemu Windows klasy i typy podstawowe, klasy ref i struktury, klasy wartości i struktury oraz wskaźniki natywne (type*
).
ranga
(Opcjonalnie) Liczba wymiarów tablicy. Musi mieć wartość 1.
identifier
Nazwa zmiennej tablicowej.
typ inicjowania
Typ wartości, które inicjują tablicę. Zazwyczaj typ tablicy i typ inicjowania są tego samego typu. Jednak typy mogą się różnić, jeśli istnieje konwersja typu inicjalizacji na typ-tablicy — na przykład jeśli typ inicjowania pochodzi z typu tablicy.
initialization-list
(Opcjonalnie) Rozdzielana przecinkami lista wartości w nawiasach klamrowych, które inicjują elementy tablicy. Jeśli na przykład lista-rozmiar-rangi to (3)
, która deklaruje jednowymiarową tablicę 3 elementów, lista inicjowania może mieć wartość {1,2,3}
.
Uwagi
W czasie kompilacji można wykryć, czy typ jest tablicą zliczaną odwołania za pomocą polecenia __is_ref_array(type)
. Aby uzyskać więcej informacji, zobacz Obsługa kompilatora dla cech typów.
Wymagania
Opcja kompilatora: /ZW
Przykłady
Poniższy przykład tworzy tablicę jednowymiarową zawierającą 100 elementów.
// 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();
}
środowiska uruchomieniowe w trakcie wykonania
Składnia
Pierwszy przykład składni używa słowa kluczowego gcnew do przydzielenia tablicy. Drugi przykład deklaruje tablicę lokalną.
[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 [,...]}
Kwalifikatory
(Opcjonalnie) Co najmniej jeden z tych specyfikatorów klasy magazynu: modyfikowalny, lotny, const, extern, statyczny.
typ tablicy
Typ zmiennej tablicowej. Prawidłowe typy to środowisko wykonawcze systemu Windows klasy i typy podstawowe, klasy ref i struktury, klasy wartości i struktury, wskaźniki natywne (type*
) i natywne typy zasobników (zwykłych starych danych).
ranga
(Opcjonalnie) Liczba wymiarów tablicy. Wartość domyślna to 1; wartość maksymalna to 32. Każdy wymiar tablicy jest samą tablicą.
identifier
Nazwa zmiennej tablicowej.
typ inicjowania
Typ wartości, które inicjują tablicę. Zazwyczaj typ tablicy i typ inicjowania są tego samego typu. Jednak typy mogą się różnić, jeśli istnieje konwersja typu inicjalizacji na typ-tablicy — na przykład jeśli typ inicjowania pochodzi z typu tablicy.
rank-size-list
Rozdzielana przecinkami lista rozmiaru każdego wymiaru w tablicy. Alternatywnie, jeśli określono parametr initialization-list , kompilator może wyłuskić rozmiar każdego wymiaru i listy rangi można pominąć.
initialization-list
(Opcjonalnie) Rozdzielana przecinkami lista wartości w nawiasach klamrowych, które inicjują elementy tablicy. Lub rozdzielana przecinkami lista zagnieżdżonych elementów list inicjowania, które inicjują elementy w tablicy wielowymiarowej.
Jeśli na przykład lista-rozmiar-rangi to (3)
, która deklaruje jednowymiarową tablicę 3 elementów, lista inicjowania może mieć wartość {1,2,3}
. Jeśli lista-rozmiar-rangi to (3,2,4)
, która deklaruje trójwymiarową tablicę 3 elementów w pierwszym wymiarze, 2 elementy w drugim i 4 elementy na trzeciej liście inicjowania może być {{1,2,3},{0,0},{-5,10,-21,99}}
.)
Uwagi
tablica znajduje się w przestrzeni nazw Platform, default i cli Przestrzenie nazw.
Podobnie jak w przypadku standardowego języka C++, indeksy tablicy są oparte na zera, a tablica jest indeksowana za pomocą nawiasów kwadratowych ([]). W przeciwieństwie do standardowego języka C++, indeksy tablicy wielowymiarowej są określane na liście indeksów dla każdego wymiaru zamiast zestawu operatorów nawiasów kwadratowych ([]) dla każdego wymiaru. Na przykład identyfikator[index1, index2] zamiast identyfikatora[index1][ index2].
Wszystkie tablice zarządzane dziedziczą z .System::Array
Dowolną System::Array
metodę lub właściwość obiektu można zastosować bezpośrednio do zmiennej tablicowej.
W przypadku przydzielenia tablicy, której typ elementu jest wskaźnikiem do klasy zarządzanej, elementy są inicjowane 0.
Po przydzieleniu tablicy, której typ elementu jest typem V
wartości , domyślny konstruktor dla V
jest stosowany do każdego elementu tablicy. Aby uzyskać więcej informacji, zobacz .NET Framework Odpowiedniki typów natywnych języka C++ (C++/CLI).
W czasie kompilacji można wykryć, czy typ jest tablicą środowiska uruchomieniowego języka wspólnego (CLR) za pomocą polecenia __is_ref_array(type)
. Aby uzyskać więcej informacji, zobacz Obsługa kompilatora dla cech typów.
Wymagania
Opcja kompilatora: /clr
Przykłady
Poniższy przykład tworzy tablicę jednowymiarową zawierającą 100 elementów, a trójwymiarową tablicę zawierającą 3 elementy w pierwszym wymiarze, 5 elementów w drugim i 6 elementów w trzecim.
// 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();
}
Zobacz też
Rozszerzenia składników dla platformy .NET i platformy uniwersalnej systemu Windows