Wszyscy znać podstawowe zasady tablicy statycznej:Czy możemy utworzyć statyczną tablicę o rozmiarze, który jest stałą czasu wykonywania?
int size = 20;
char myArray[size];
nie jest legalne. .
const int size = 20;
char myArray[size];
jest OK.
Ale co z tego?
int f(const int size)
{
char myArr[size];
}
void main()
{
f(2);
f(1024);
}
MSVC mówi, że to jest błąd, gcc wydaje się skompilować i wykonać go dobrze.
Oczywiście nie jest przenośny, ale czy powinien zostać zaakceptowany?
Który kompilator robi to, co trzeba w tej sytuacji?
Ponadto, jeśli jest to dozwolone przez kompilator, czy powinno być dozwolone przez dobre standardy programowania/praktyki?
EDYTOR: Pomysł polega na tym, że chciałbym przydzielić alokację dla prędkości, ale nie wiedziałbym, w czasie kompilacji, rozmiaru tablicy. Wiem, że istnieje kilka innych rozwiązań, a ten podział na stosy prawdopodobnie nie byłby optymalizacją znaczącą, ale myślę, że jest to interesujące zastosowanie.
Twoje pierwsze dwa przykłady są identyczne dla postaci. – AlcubierreDrive