Dato il seguente codice:
codice:switch( n ) { case 5: n = 5+2; break; case 6: n = 6+2; break; default: __assume( 0 ); }
Quali sono le funzionalità di __assume ?
Da MSDN vengo a conoscenza di quanto segue:
"The use of assume(0) tells the optimizer that the default case cannot be reached. As a result, the compiler does not generate code to test whether p has a value not represented in a case statement. Note that assume(0) must be the first statement in the body of the default case for this to work.
Because the compiler generates code based on __assume, that code might not run correctly if the expression inside the __assume statement is false at run time."
Ma qual'è la relazione che lega la seconda frase alla prima?
In particolare nel codice (di esempio) da me riportato se l'espressione è false ( __assume( false ) ) e se n, prima dello switch, è diversa sia da 5 che da 6, effettuando il debug si vede come il flusso entri nello switch e in particolare esegua le istruzioni del primo case, qualunque esso sia.
Se invece l'espressione è true ( __assume( true ) ) l'applicazione si comporta (o cosi sembra) come è riportato da MSDN.
Delucidazioni?