Situación: comprobación del estado en C++ o C# con muchos criterios:En C++ y C#, ¿se realizan múltiples verificaciones de condición en una secuencia predeterminada o aleatoria?
if (condition1 && condition2 && condition3)
{
// Do something
}
Siempre he creído que la secuencia en que se realizan estas comprobaciones no está garantizada. Por lo tanto, no es necesariamente la primera condición1, luego la condición2 y solo la condición3. Lo aprendí en mis tiempos con C++. Creo que me lo dijeron o lo leyeron en alguna parte.
Hasta saber siempre he escrito código de seguridad para tener en cuenta posibles punteros nulos en la siguiente situación:
if ((object != null) && (object.SomeFunc() != value))
{
// A bad way of checking (or so I thought)
}
Así escribía:
if (object != null)
{
if (object.SomeFunc() != value)
{
// A much better and safer way
}
}
Debido a que no estaba seguro de la la comprobación no nula se ejecutará primero y solo entonces se llamará al método de instancia para realizar la segunda comprobación.
Ahora nuestras mentes más grandes de la comunidad me están diciendo que la secuencia en la que se realizan estas comprobaciones está garantizada para ejecutarse en el orden de izquierda a derecha.
Estoy muy sorprendido. ¿Es realmente así para los lenguajes C++ y C#?
¿Alguien más ha escuchado la versión que escuché antes?
Las subexpresiones en C# se evalúan de izquierda a derecha, siempre, punto. Las subexpresiones en C/C++ se evalúan en orden de secuencia de puntos. Dos expresiones en el mismo punto de secuencia se pueden evaluar en cualquier orden. Haga una búsqueda web en "punto de secuencia" si necesita una definición formal. –