me gustaría saber si esto parece correcto:C: ¿hay una "evaluación diferida" cuando se usa el operador &&, como en C++?
while((next !=NULL) && (strcmp(next->name, some_string) < 0) {
//some process
}
Es decir, si el próximo es NULL
, a continuación, la segunda parte de la expresión no será jamás probado por el compilador? He escuchado que en C++ es el caso (pero ni siquiera estoy seguro de eso).
¿Alguien puede confirmarme que no obtendré errores extraños en algunos compiladores con eso?
@Sean: Las pruebas no son necesariamente iguales a "garantizadas por el estándar". –
Por cierto, esto no siempre es cierto en C++. La expresión: '(next! = NULL)' puede usar un operador '! =' Sobrecargado en cualquier tipo 'next' is. Ese operador puede devolver otro tipo en el que '&&' está sobrecargado. Y para '&&' sobrecargado no existe un cortocircuito incorporado, por lo que la expresión en el RHS se evaluará independientemente del LHS. –
Esto no es una evaluación perezosa – pmg