2010-03-02 16 views

risposta

14

Si potrebbe utilizzare checked in guardia contro un (silenzioso) di overflow in un'espressione.
E utilizzare unchecked quando si sa che potrebbe verificarsi un trabocco innocuo.

Si utilizzano entrambi in luoghi in cui non si desidera fare affidamento sull'impostazione predefinita del compilatore (a livello di progetto).

Entrambe le forme sono piuttosto rare, ma quando si esegue l'aritmetica di interi critici vale la pena di pensare a un possibile overflow.

Si noti inoltre che sono disponibili in due forme:

x = unchecked(x + 1); // (expression) 
unchecked { x = x + 1;} // { statement(s) } 
3

Da The checked and unchecked operators

Il controllati ed incontrollati operatori vengono utilizzati per controllare il controllo di overflow contesto per integrale tipo operazioni aritmetiche e conversioni.

In un contesto controllato, se un'espressione produce un valore che è al di fuori della gamma del tipo di destinazione, il risultato dipende se l'espressione è costante o non costante. Le espressioni costanti causano errori di compilazione, mentre le espressioni non costanti vengono valutate in fase di esecuzione e generano eccezioni.

In un contesto incontrollato, se un espressione produce un valore che è fuori del campo del tipo di destinazione , il risultato viene troncato.

checked, unchecked

+1

OK, questo è quello che sono .. Potresti approfondire quando vuoi farlo? – NotMe

6

checked vi aiuterà a prendere System.OverFlowException che passerà inosservato altrimenti

int result = checked (1000000 * 10000000); 
    // Error: operation > overflows at compile time 

int result = unchecked (1000000 * 10000000); 
    // No problems, compiles fine 
3

checked vs. unchecked è utile anche nel quelle volte in cui stai facendo matematica intera. in particolare le operazioni di incremento e si sa che si andrà ad incrementare oltre UInt32.MaxValue, e si desidera che l'overflow sia innocuo a 0.

Problemi correlati