Я просмотрел эту статью. Я понимаю, что правила объяснены, но мне интересно, что именно блокирует компилятор от принятия следующего синтаксиса при определении постоянного многомерного массива и непосредственно инициализации его известными значениями данного типа:
const int multi_arr1[][] = {{1,2,3}, {1,2,3}}; // why not?
const int multi_arr2[][3] = {{1,2,3}, {1,2,3}}; // OK
error: declaration of 'multi_arr1' as multidimensional array must have bounds
for all dimensions except the first
Что мешает компилятору смотреть вправо и понимает, что мы имеем дело с 3 элементами для каждого "подмассива" или, возможно, возвращаем ошибку только для случаев, когда программист передает, например, другое количество элементов для каждого подмассива, например {1,2,3}, {1,2,3,4}
?
Например, при работе с массивом 1D char компилятор может посмотреть строку в правой части =
и это действительно:
const char str[] = "Str";
Я хотел бы понять, что происходит, чтобы компилятор не смог вывести размеры массива и рассчитать размер для распределения, так как теперь мне кажется, что у компилятора есть вся информация, необходимая для этого. Что мне здесь не хватает?