Eingeben a[-1] = 5;
ist etwas, was nur Neulinge tun würden (wie Richard Tingle sagte). Es lohnt sich also nicht, den Sprachstandard nur für diese Art von Fehlern zu aktualisieren. Ein interessanterer Fall wäre a[SOME_CONSTANT] = 5;
, wobei SOME_CONSTANT
als static final int SOME_CONSTANT = -1;
(oder ein Ausdruck, der nur Konstanten enthält, die zu -1
berechnet werden) in einer anderen Klasse definiert ist. Aber auch dann, wenn der Compiler dies als einen Fehler markiert hat, kann es Fälle fangen, in denen der Programmierer a[SOME_CONSTANT] = 5;
in eine if
-Anweisung gesetzt hat, die bereits auf negative Werte der Konstante überprüft hat. (Ich gehe hier davon aus, dass SOME_CONSTANT
eine Konstante ist, deren Wert sich ändern könnte, wenn sich die Anforderungen der Anwendung ändern.) Obwohl die Sprache es theoretisch unmöglich machen würde, eine Array-Indexierungsoperation zu schreiben, die unmöglich gelingen kann, gibt es gute Gründe, dies nicht zu tun.
P.S. Das ist ein echtes Problem. Die Ada-Sprache prüft einige Kompilierungszeit auf statische Ausdrücke, die nicht erfolgreich sein können, aber es prüft diesen Fall nicht, und es hat in den letzten paar Wochen einige Diskussionen darüber gegeben, ob es sollte, oder ob Compiler erlaubt sein sollten (aber nicht erforderlich), um Programme mit Array-Indizierung abzulehnen, von denen bekannt ist, dass sie fehlschlagen.
Während Sie offensichtliche Beispiele herausziehen können, die ein Compiler fangen konnte, sind sie nicht die übliche Ursache; es ist die sneeky diejenigen, die Sie bekommen. Ich habe nie 'a [-1] = 5;' oder ähnlich getippt. Die 1-zu-große for-Schleife über ein Array ist ziemlich üblich für Leute, die anfangen (besonders wenn sie aus einer 1-indexierten Sprache kommen) und es wäre nett, wenn das abgefangen würde, aber dann beginnt der Compiler Teile zu laufen des Codes, um etwas zu fangen, das nur Anfängerprogramme tun. Alles kostet Zeit in der Compile-Stufe –
Ich stimme zu, dass es gut ist, dass der Compiler keine for-Schleifen bezüglich der Array-Indizierung prüft ... aber immer noch a [-1] = 5; sollte ein Kompilierungsfehler sein, wie ein [1.5] = 5; wenn wir Dezimalzahlen verwenden. Ich wette, keiner von uns verwendet Dezimalzahlen als Index und es ist immer noch keine Ausnahme. –