Поделиться через


Массивы (C++/CLI и C++/CX)

Тип Platform::Array<T> в C++/CX или ключевое слово array в C++/CLI объявляет массив указанного типа и начальное значение.

Все платформы

Массив должен быть объявлен с помощью модификатора handle-to-object (^) после закрывающей угловой скобки (>) в объявлении. Количество элементов массива не является частью типа. Одна переменная массива может ссылаться на массивы разных размеров.

В отличие от стандартной версии C++, индексация не идентична арифметическим операциям над указателями и не коммутативна.

Дополнительные сведения о массивах см. в следующих разделах:

Среда выполнения Windows

Массивы являются членами пространства имен Platform. Они могут быть только одномерными.

Синтаксис

В первом примере синтаксиса используется агрегатное ключевое слово ref new, чтобы выделить память для массива. Во втором примере объявляется локальный массив.

[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
(Необязательно) Один или несколько из следующих спецификаторов класса хранения: mutable, volatile, const, extern, static.

array-type
Тип переменной массива. Допустимые типы: основные типы и классы среды выполнения Windows, ссылочные классы и структуры, классы и структуры значений, а также собственные указатели (type*).

rank
(Необязательно) Получает число измерений массива. Должен иметь значение 1.

идентификатор
Имя переменной массива.

initialization-type
Тип значений, которые инициализируют массив. Как правило array-type и initialization-type относятся к одному типу. Однако типы могут быть разными, если есть преобразование из initialization-type в array-type. Например, если initialization-type получен из array-type.

initialization-list
(Необязательно) Разделенный запятыми список инициализирующих элементы массива значений в фигурных скобках. Например, если rank-size-list имеет значение (3), т. е. объявляется одномерным массивом из 3 элементов, initialization-list может иметь вид {1,2,3}.

Замечания

Во время компиляции с помощью __is_ref_array(type) можно определить, является ли тип массивом с подсчетом ссылок. Дополнительные сведения см. в статье Compiler Support for Type Traits (C++/CLI and C++/CX) (Поддержка признаков типов компилятором (C++/CLI и C++/CX)).

Требования

Параметр компилятора: /ZW

Примеры

В следующем примере создается одномерный массив из 100 элементов.

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

Среда CLR

Синтаксис

В первом примере синтаксиса используется ключевое слово gcnew, чтобы выделить память для массива. Во втором примере объявляется локальный массив.

[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
(Необязательно) Один или несколько из следующих спецификаторов класса хранения: mutable, volatile, const, extern, static.

array-type
Тип переменной массива. Допустимые типы: основные типы и классы среды выполнения Windows, ссылочные классы и структуры, классы и структуры значений, собственные указатели (type*) и собственные типы POD.

rank
(Необязательно) Получает число измерений массива. Значение по умолчанию — 1; максимальное число — 32. Каждое измерение массива само является массивом.

идентификатор
Имя переменной массива.

initialization-type
Тип значений, которые инициализируют массив. Как правило array-type и initialization-type относятся к одному типу. Однако типы могут быть разными, если есть преобразование из initialization-type в array-type. Например, если initialization-type получен из array-type.

rank-size-list
Разделенный запятыми список размеров каждого измерения массива. Если задан параметр initialization-list, компилятор может определить размер каждого измерения, и тогда параметр rank-size-list можно опустить.

initialization-list
(Необязательно) Разделенный запятыми список инициализирующих элементы массива значений в фигурных скобках. Или разделенный запятыми список вложенных элементов initialization-list, инициализирующих элементы в многомерном массиве.

Например, если rank-size-list имеет значение (3), т. е. объявляется одномерным массивом из 3 элементов, initialization-list может иметь вид {1,2,3}. Если параметр rank-size-list имеет значение (3,2,4), т. е. объявляется трехмерным массивом с 3 элементами в первом измерении, 2 элементами во втором и 4 элементами в третьем, то параметр initialization-list может иметь вид {{1,2,3},{0,0},{-5,10,-21,99}}.

Замечания

Массив находится в пространстве имен Platform, default, and cli Namespaces.

Как и в стандартной версии C++, индексы массива начинаются от нуля, и массив индексируется с помощью квадратных скобок ([]). В отличие от стандартной версии C++, индексы многомерного массива указываются в списке индексов каждого измерения вместо набора операторов квадратных скобок ([]) для каждого измерения. Например, идентификатор[индекс1, индекс2] вместо идентификатор[индекс1][индекс2].

Все управляемые массивы являются производными от System::Array. Любой метод или свойство System::Array может применяться непосредственно к переменной массива.

При создании массива указателей на управляемый класс элементы массива инициализируются нулем.

При создании массива, тип элементов которого является типом значения V, к каждому элементу массива применяется конструктор по умолчанию для V. Дополнительные сведения см. в разделе Эквиваленты собственным типам C++ в .NET framework.

Во время компиляции с помощью __is_ref_array(type) можно определить, является ли тип массивом среды CLR. Дополнительные сведения см. в статье Compiler Support for Type Traits (C++/CLI and C++/CX) (Поддержка признаков типов компилятором (C++/CLI и C++/CX)).

Требования

Параметр компилятора: /clr

Примеры

В следующем примере создается одномерный массив из 100 элементов и трехмерный массив с 3 элементами в первом измерении, 5 элементами во втором и 6 элементами в третьем.

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

См. также

Расширения компонентов для .NET и UWP