Массивы (расширения компонентов 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();
}