мой вопрос действительно прост (что не означает, что ответ будет таким же простым..: D)
почему массивы в С++ включают размер как часть типа, а Java нет?
Я знаю, что ссылочные переменные массива Java являются просто указателями на массивы в куче, но также являются указателями С++ для массивов, но мне нужно предоставить размер даже тогда. Сначала проанализировать С++:
// in C++ :
// an array on the stack:
int array[*constexpr*];
// a bidimensional array on the stack:
int m_array[*constexpr1*][*constexpr2*];
// a multidimensional array on the stack:
int mm_array[*constexpr1*][*constexpr2*][*constexpr3*];
// a dynamic "array" on the heap:
int *array = new int[n];
// a dynamic bidimensional "array" on the heap:
int (*m_array)[*constexpr*] = new int[n][*constexpr*];
// a dynamic multidimensional "array" on the heap:
int (*mm_array)[*constexpr*][*constexpr*] = new int [n][*constexpr1*][*constexpr2*];
n не обязательно должно быть выражением постоянной времени компиляции, все элементы инициализируются по умолчанию. Динамически выделенные "массивы" не относятся к массиву типов, но новое выражение дает указатель на первый элемент.
Поэтому, когда я создаю динамический массив, все размеры, кроме первого, должны быть постоянными выражениями (иначе я не смог бы объявить указатель для хранения своих элементов). Правильно ли?
Теперь на Java. Я могу выделить массив в куче, так как это работает Java:
// a dynamic array on the heap:
int[] array = new int[n];
// a dynamic bidimensional array on the heap:
int[][] m_array = new int[n][];
// a dynamic multidimensional array on the heap:
int[][][] mm_array = new int [n][][];
В Java, по-видимому, не заботятся о размере массива при определении ссылочной переменной массива (это ошибка в Java, чтобы явно предоставить размер), и поэтому мне просто нужно предоставить размер для первого измерения при создании массив. Это позволяет мне создать jagged массив, который я не уверен, что могу создать на С++ (не массивы указателей).
Может кто-нибудь объяснить мне, как это? возможно, что происходит за шторами, должно быть ясно. Спасибо.