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


Массивы (расширения компонентов C++)

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

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

Массив должен быть объявлен с помощью модификатора дескриптора объекта (^) после закрывающей угловой скобки (>) в объявлении.

Количество элементов массива не является частью типа. Одна переменная массива может ссылаться на массивы различных размеров.

В отличие от стандартного 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.

  • identifier
    Имя переменной массива.

  • 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). Для получения дополнительной информации см. Поддержка характеристик типов компилятором (расширения компонентов C++).

Требования

Параметр компилятора: /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. Каждое измерение массива само является массивом.

  • identifier
    Имя переменной массива.

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

  • rank-size-list
    Список размеров каждого измерения массива, разделенный запятыми. Также, если задан параметр initialization-list, компилятор может определить размер каждого измерения, и rank-size-list можно опустить. Для получения дополнительной информации см. Как Создание массивов Multidimension.

  • 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}}.

Примечания

array находится в пространстве имен Пространства имен platform, default и cli (расширения компонентов C++).

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

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

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

При создании массива, тип элементов которого является типом значения V, к каждому элементу массива применяется конструктор по умолчанию для V. Для получения дополнительной информации см. Эквиваленты собственным типам C++ в .NET Framework (C++/CLI).

Во время компиляции, можно определить, является ли тип массивом среды CLR с помощью __is_ref_array(type). Для получения дополнительной информации см. Поддержка характеристик типов компилятором (расширения компонентов C++).

Требования

Параметр компилятора: /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();
}

См. также

Основные понятия

Расширения компонентов для платформ среды выполнения