int qempty()
{
return (f == r ? 1 : 0);
}
En el fragmento de arriba, ¿qué significa "?"? ¿Con qué podemos reemplazarlo?¿Qué significa '?' hacer en C++?
int qempty()
{
return (f == r ? 1 : 0);
}
En el fragmento de arriba, ¿qué significa "?"? ¿Con qué podemos reemplazarlo?¿Qué significa '?' hacer en C++?
Esto se conoce comúnmente como el conditional operator, y cuando se utiliza de esta manera:
condition ? result_if_true : result_if_false
... si el condition
evalúa a true
, la expresión se evalúa result_if_true
, de lo contrario, se evalúa como result_if_false
.
Es syntactic sugar, y en este caso, se puede reemplazar con
int qempty()
{
if(f == r)
{
return 1;
}
else
{
return 0;
}
}
Nota: Algunas personas se refieren a ?:
como "el operador ternario", porque es la única ternaria operador (es decir, el operador que toma tres argumentos) en el idioma que están utilizando.
Creo que implícitamente significan "el operador ternario (C++)". ¿Qué otros operadores ternarios existen en C++? – sblom
Esa es la única en C++ – Colin
Para cualquier persona que necesite amor condicional: http://www.artima.com/cppsource/foreach.html. Eric Niebler explica cómo su boost.foreach utiliza el operador condicional. –
Es el operador condicional.
a? b: c
Es un atajo para IF/THEN/ELSE.
significa: si a es cierto, devuelva b, de lo contrario devuelva c. En este caso, si f == r, 1 retorno, el retorno demás 0.
Este es un operador ternario, que es básicamente una línea if
x ? y : z
obras como
if(x) y else z
excepción , en lugar de declaraciones tienes expresiones; para que pueda usarlo en medio de una declaración más compleja.
Es útil para escribir códigos sucintos, pero puede ser usado en exceso para crear código difícil de mantener.
Tienes que tener cuidado aquí; no funciona exactamente como una declaración if. Mientras que * puedes * decir algo como int 'a = x? y: z; 'usted * no puede * decir' int a = if (x) y else z; ' –
que vale la pena saber que hay un punto de secuencia en '?'. Eso significa que lo siguiente es válido: ++ x? x: y; –
@Daniel, eso es lo que quise decir con expresiones en lugar de declaraciones. Probablemente no fui lo suficientemente explícito sobre la diferencia, así que gracias por agregar algunas aclaraciones. – Richard
Se llama conditional operator.
se puede reemplazar con:
int qempty(){
if (f == r) return 1;
else return 0;
}
El signo de interrogación es el operador condicional. El código significa que si == f r entonces se devuelve 1, de lo contrario, devuelve 0. El código podría ser reescrita como
int qempty()
{
if(f==r)
return 1;
else
return 0;
}
que no es probablemente la manera más limpia de hacerlo, pero espero que ayuda a su comprensión.
Usted sólo puede reescribir como:
int qempty(){ return(f==r);}
Qué hace lo mismo como se ha dicho en las otras respuestas.
Esto llevaría a cabo la conversión implícita de boolean a int – mmcrae
Sólo una nota, si alguna vez ve esto:
a = x ? : y;
Es una extensión de GNU a la norma (ver https://gcc.gnu.org/onlinedocs/gcc/Conditionals.html#Conditionals).
Es lo mismo que
a = x ? x : y;
en CLang (al menos las versiones más recientes) esta extensión también está disponible. Está disponible incluso con el indicador C++ 11 desactivado en un proyecto qmake. ¿Entonces una expresión como int 'x = 1 + 1? : 0 '; correctamente devuelve '2', en mi compilador y esto no se quejó nada. –
En este caso particular, por supuesto, sólo puede reemplazarlo con retorno f == r; – Eclipse
En los comentarios, se usa para hacer una pregunta. –
@Eclipse: No confiaría en una conversión implícita bool-> int si puedo evitarlo. –