2008-12-25 25 views
18

Siempre me he preguntado cómo escribir la sintaxis "A ? B : C" en un lenguaje compatible con C++.¿Cómo uso el operador condicional?

creo que funciona algo así como: (pseudo código)

If A > B 
    C = A 
Else 
    C = B 

¿Alguno veterano programador de C++ por favor me ayude a cabo?

Respuesta

42

Funciona así:

(condition) ? true-clause : false-clause 

Se utiliza más comúnmente en las operaciones de asignación, aunque tiene otros usos también. El operador ternario ? es una forma de acortar una cláusula if-else, y también se denomina instrucción if inmediata en otros idiomas (IIf(condition,true-clause,false-clause) en VB, por ejemplo).

Por ejemplo:

bool Three = SOME_VALUE; 
int x = Three ? 3 : 0; 

es lo mismo que

bool Three = SOME_VALUE; 
int x; 
if (Three) 
    x = 3; 
else 
    x = 0; 
+1

Por otra parte, si x eran un int const en sus ejemplos, la versión ternaria sería la única opción que compila. –

+0

¿No sería mejor inicializar Three? –

+0

Shmoopty: muy cierto, porque solo se puede inicializar una constante cuando se declara. Jonathan - Sí, sí, lo haría. Editado Tal vez debería haber hecho "// Three es un bool" en su lugar. –

2

Supongo que quieres decir cosas como a = b? c: d, donde b es la condición, c es el valor cuando b es verdadero, y d es el valor cuando b es falso.

4

En C++ no hay parte real si parte de esto. Se llama operador ternario. Se usa así: < declaración booleana >? < resultado si es verdadero >: < resultado si es falso >; Para su ejemplo anterior se vería así:

C = A > B ? A : B; 

este artículo en la wikipedia también lo discute: http://en.wikipedia.org/wiki/Ternary_operation

7

Funciona así:

expression ? trueValue : falseValue 

Lo que significa, básicamente, que si expression evalúa a true, trueValue se devolverá o se ejecutará, y falseValue se devolverá o evaluará si no.

Recuerde que trueValue y falseValue solo se evaluarán y ejecutarán si la expresión es verdadera o falsa, respectivamente. Este comportamiento se llama cortocircuito.

1

Yo diría que el? es un atajo. Sin embargo, algunos programadores "duros" tienden a decir que lo escriben por mucho tiempo para que, en casos futuros, las personas puedan leer y modificar el código fácilmente.

Por ejemplo, si se escribe

int a = b<c ? b : c; 

Algunas personas afirman que es más clara para escribir:

if(b<c) 
a = b; 
else 
a = c; 

Debido a que en futuros casos, las personas pueden contagiarse. Por supuesto, un simple b < c? b: c es fácil de atrapar, pero a veces se realizan operaciones complejas y puede ser difícil de detectar.

+0

Su ejemplo es el más sencillo para casos de uso típicos. El término correcto es "operadores ternarios" y son muy fáciles de entender y usan una sintaxis similar en muchos idiomas. En R, por ejemplo, la misma instrucción sería 'a = ifelse (b

1

nadie parece mencionar que un resultado de la expresión operador condicional puede ser un valor L en C++ (pero no en C). El código siguiente se compila en C++ y funciona bien:

int a, b; 
    bool cond; 
    a=1; b=2; cond=true; 
    (cond? a : b) = 3; 
    cout << a << "," << b << endl; 

Los anteriores programa imprime 3, 2

Sin embargo, si a y b son de diferentes tipos, que no funcionará. El siguiente código da un error del compilador:

int a; 
    double b; 
    bool cond; 
    a=1; b=2; cond=true; 
    (cond? a : b) = 3; 
    cout << a << "," << b << endl; 
0

es bastante simple Su sintaxis básica es: expresión1 expresión2:? Expresión3;

Si la expresión 1 es válidas entonces la expresión 2 llevará a cabo de otro modo la expresión 3 sostendrá.

ejemplo:

hey=24>2?24:34;

aquí como condición es verdadero valor de 24 se le asignará a la misma. si era falsa entonces 34 será asignado a ella

0

simply you can write this as

C = (A> B) A:? B;

THIS IS SAME AS:

if(A>B) 

C=A; 

else 

C=B;