Pregunta

Tengo una pregunta simple que estoy posando sobre todo para mi curiosidad.

¿Cuáles son las diferencias entre estas dos líneas de código? (En C ++)

for(int i = 0; i < N, N > 0; i++)

for(int i = 0; i < N && N > 0; i++)

La selección de las condiciones es completamente arbitraria, sólo estoy interesado en las diferencias entre, y &&.

No soy un principiante a la codificación por cualquier medio, pero nunca he molestado con el operador coma.

¿Existen diferencias de rendimiento / de comportamiento o es puramente estético?

Una última nota, sé que hay peces más grandes para freír el rendimiento de un operador condicional, pero tengo curiosidad. Me disfrutar.

Editar Gracias por sus respuestas.

Resulta que el código que provocó esta pregunta había hecho mal uso del operador coma en la forma en que he descrito. Me preguntaba cuál era la diferencia y por qué no era un operador &&, pero simplemente fue escrito incorrectamente. No pensé que algo estaba mal con ella porque funcionó muy bien. Gracias por enderezar a salir.

¿Fue útil?

Solución

A pesar de que parece que,

for(int i = 0; i < N, N > 0; i++)

y

for(int i = 0; i < N && N > 0; i++) 

no son equivalentes.

Aquí está la prueba.

int main(int argc, char* argv[])
{
  int N = 10;
  int i = 5;

  int val = (N, i);
  cout << val << endl;
}

Resultados:

5

Lo que significa que la hora de determinar cuando el bucle terminará usará N > 0. Si N = 10, esto significa que siempre va a ser verdad y el bucle nunca se salida.

Ejecutar este y ver la prueba.

int main(int argc, char* argv[])
{
  int N = 10;
  int i = 5;

  for(int i = 0; i < N, N > 0; i++){
     cout << val << endl;
  }
}

bash-2.05$ ./a.out                  
0                                   
1                                   
2                                   
3                                   
4                                   
5                                   
6                                   
7                                   
8                                   
9                                   
10                                  
11                                  
...
142
143
144
145
146
147
148
^C

Si N es una constante o variable que no cambia dentro del bucle entonces se podría simplemente elimine la marca N > 0 comprobando una vez primera, es decir.

if (N > 0){
  for (int i = 0; i < N; i++)
   ...
}

Otros consejos

Uso de una coma como que simplemente se descartar la primera condición .

El operador coma significa "ejecutar estas instrucciones en este orden, y toma el valor de la última".

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top