[C++] ¿Qué hay de malo en declarar una variable dentro de la condición de si?


Answers

Hay un problema con el alcance.

Considera el siguiente código:

if ((int a = foo1()) || (int b = foo2()))
{
    bar(b);
}

¿Está b declarado dentro del bloque? ¿Qué pasa si foo1() devuelve verdadero?

Question

Quizás me estoy oxidando (he estado escribiendo en Python recientemente).

¿Por qué esto no compila?

if ( (int i=f()) == 0)

sin el () alrededor de la int i=f() obtengo otro error mucho más razonable de que i no es booleano. ¡Pero es por eso que quería el paréntesis en primer lugar!

Mi conjetura sería que el uso de paréntesis lo convierte en una expresión, y que las declaraciones de declaración no están permitidas en una expresión. ¿Es tan? Y si es así, ¿es una de las peculiaridades de sintaxis de C ++?

Por cierto, en realidad estaba tratando de hacer esto:

if ( (Mymap::iterator it = m.find(name)) != m.end())
    return it->second;



Es cierto que no puedes escribir

if ( (int i=f()) == 0)

pero puedes escribir perfectamente

if ( int i=f())

Entonces puede usar el operador && para realizar ambas operaciones en una declaración como

if ( int i=1 && (i=f()) == 0)

Debería inicializar con cualquier valor que no sea 0, y debería ser la primera condición si su compilador aplica la evaluación de izquierda a derecha.

Pero desafortunadamente, eso no es aplicable en el caso de los iteradores como lo pide su segundo ejemplo.