Situazione: condizione di controllo in C++ o C# con molti criteri:In C++ e C# ci sono più controlli di condizione eseguiti in una sequenza predeterminata o casuale?
if (condition1 && condition2 && condition3)
{
// Do something
}
Ho sempre creduto che la sequenza in cui vengono eseguiti questi controlli non è garantita. Quindi non è necessariamente prima condizione1 quindi condizione2 e solo allora condizione3. L'ho imparato nei miei tempi con il C++. Penso che mi sia stato detto o letto da qualche parte.
Fino a sapere che ho sempre scritto codice di sicurezza per tenere conto di eventuali puntatori nulli nella seguente situazione:
if ((object != null) && (object.SomeFunc() != value))
{
// A bad way of checking (or so I thought)
}
Così stavo scrivendo:
if (object != null)
{
if (object.SomeFunc() != value)
{
// A much better and safer way
}
}
Perché io non ero sicuro del il controllo not-null verrà eseguito per primo e solo allora verrà chiamato il metodo di istanza per eseguire il secondo controllo.
Ora le nostre più grandi menti di comunità mi dicono che la sequenza in cui vengono eseguiti questi controlli è garantita per l'ordine da sinistra a destra.
Sono molto sorpreso. È davvero così per entrambi i linguaggi C++ e C#?
Qualcun altro ha sentito la versione che ho sentito prima?
Le sottoespressioni in C# vengono valutate da sinistra a destra, sempre, punto. Le sottoespressioni in C/C++ vengono valutate in ordine di sequenza. Due espressioni nello stesso punto di sequenza possono essere valutate in qualsiasi ordine. Esegui una ricerca sul "punto di sequenza" se hai bisogno di una definizione formale. –