Con un sacco di C++ sfondo ho usato per scrivere il seguente:CS0133 "L'espressione assegnata a 'identificatore' deve essere costante" - qual è la ragione di ciò?
const int count = ...; //some non-trivial stuff here
for(int i = 0; i < count; i++) {
...
}
e mi aspettavo che lo stesso avrebbe funzionato bene in C#. Tuttavia ...
byte[] buffer = new byte[4];
const int count = buffer.Length;
produce errore CS0133: L'espressione viene assegnato a 'contare' deve essere costante.
Non capisco. Perché è invalido? int
è un tipo di valore, non è vero? Perché non posso assegnare un valore e rendere la variabile immodificabile in questo modo?
Qual è la limitazione rispetto a quello che ci si aspetta da const? E, beh, non sono sicuro di aver seguito la defn di "costituttezza" di Wikipedia.Solo che usa const se appropriato? In che modo legalmente legga questa correttezza? – ruffin
@ruffin: in C#, const e readonly possono essere applicati solo ai membri della classe. In C++, const non significa "costante in fase di compilazione", ma "non sarà modificato". È possibile avere metodi membri const (che non modificano la classe di cui fanno parte, quindi, se si dispone di un oggetto const, è possibile richiamare solo i metodi const. I parametri della funzione possono essere const, (di nuovo , il che significa che la funzione chiamata non può modificare i parametri o chiamare su di essa funzioni membro non const.) – jalf
Ciò consente di creare una nozione di "cost-correctness", ovvero, è possibile distinguere tra "modifica" e "non modificabile", e rileva in fase di compilazione se si tenta accidentalmente di eseguire un'operazione di modifica su un oggetto const. È possibile definire una classe per limitare le operazioni che possono essere eseguite su di esso se è const, e se lo si fa in modo coerente in tutto il tuo programma, è costante.Tutti i tentativi di violare la costanza "logica" diventa un errore in fase di compilazione – jalf