Chciałbym się dowiedzieć dlaczego rozmiar tablicy statycznej musi być stałą znaną w czasie kompilacji. Pewnie dlatego, że stałe trzeba inicjalizować od razu - a nie dopiero po momencie definicji. No OK, ale kompilator mógłby się zgadzać tez na coś takiego:
int size = 44; //ok od razu inicjalizacja
int array[size];
Bo size jest od razu inicjalizowane (nie zawiera “śmieci”, które czasem może stanowić liczba ujemna). Dlaczego tak robić nie można ?
Bo nie sądze, że rozmiar przechowywany w stałym obiekcie jest poprawny dlatego, że nie można zmienić wartości w tym obiekcie - wszystko można przeciez za pomocą const_cast
Zastanów się jak daleko (w twojej propozycji zmian C/C++) może być deklaracja zmiennej z inicjalizacją od deklaracji tablicy o rozmiarze zapisanym w tej zmiennej, i jakie operacje mogą być pomiędzy nimi.
No ale co z tego (rozumiem, że chodzi Ci o to, że długo pracujemy na tej zmiennej i kompilator musi prześledzić całą pracę na tej zmiennej, żeby zainijalizować jej wartością rozmiar tablicy) ? Przecież przy linijce:
int array[size];
Kompilator dowiaduje się o adresie size (pewnie robi u siebie &size) i wyciąga wartość z komórki o takim adresie - i tworzy tablicę o takim rozmiarze. To samo mógłby robić jeżeli size nie byłoby stałą - jedno sięgnięcie pod adres i tyle…