2010-07-27 23 views
8

I una vez visto un operador -wired- en C++ que asigna valor si es mayor que ..
que era una combinación de ?, < y =C++ operador condicional

por ejemplo sea ​​x = valor si el valor es mayor que x

I no me refierox=(x<value)x:value

Era una especie de x<?=value

Pero no puedo recordar exactamente, y no puede encontrar en línea. .. ¿Puede alguien recordarme?

Gracias,

+2

'¿Qué tal si (valor> x) x = valor;'? – GManNickG

+0

@GMan: Lo sé ... pero realmente tengo curiosidad por recordarlo ... – Betamoo

+0

http://stackoverflow.com/questions/5199630/what-does-the-operator-mean –

Respuesta

8

gcc tiene - en la versión 3.3.6 al menos! - una extensión de lenguaje específica de gcc que proporciona operadores especializados para implementar min y max. Quizás esto es en lo que estás pensando?

Minimum and Maximum Operators in C++

no tengo gcc útil para probarlo con, pero podría tener un formulario de actualización, también.

+0

Sí ... eso está tan cerca de lo que significa ... – Betamoo

+2

Vale la pena señalar que estos están en desuso: "Los operadores mínimo y máximo de G ++ (' ? ') y sus formularios compuestos (' ? = ') han quedado obsoletos y se eliminarán en una versión futura El código que usa estos operadores debería modificarse para usar std :: min y std :: max en su lugar ". - http://gcc.gnu.org/onlinedocs/gcc-4.0.1/gcc/Deprecated-Features.html –

+0

@Magnus Hoff: Póngalo como respuesta y elegiré el suyo ... – Betamoo

1

¿Está pensando en la ternary operator?

result = a > b ? x : y; 
+0

Sí lo hace. Excepto que no se llama operador trenary (cualquier operador con tres operandos es trenary) sino operador condicional. – delnan

+1

Dado que solo hay un operador ternario en C & C++ (¿por ahora?) Creo que será bastante claro para todo el mundo de lo que está hablando ... –

+0

No, ¡No es eso! – Betamoo

11

No hay ningún operador que asigne variables en función de sus valores relativos.

Sin embargo, no es el operador?::

x = value > x ? value : x; 

Si lo lee en voz alta de izquierda a derecha, tiene sentido.

+0

Curioso que esto fue downvoted por alguna razón ... –

0
x = x < value ? 0 : 1; 

Esta función establece x en 0 es x < valor, 1 en caso contrario.

+0

en realidad, en este caso puedes hacer 'x = x> = value' para lograr esto, verdadero se evalúa a 1. – KillianDS

0

que es una versión más conveniente de una sentencia if que se utiliza para la asignación

int x = (some bool) ? trueval : falseval; 

esto es más o menos lo que significa, cuando el bool se evalúa tampoco obtiene el TrueVal o falseval dependiendo del resultado, es más fácil que decir

int x; 
if (someval) 
    x = trueval; 
else 
    x = falseval; 
0

sospecho lo que usted está pensando en una gcc extension que le permite dejar de lado el operando a mediados del operador condicional, por lo que (por ejemplo):

a = b ? b : c; 

se puede escribir como:

a = b ?: c; 

A pesar de la '2.95.3' en la URL, no estoy al tanto de una nueva versión de la página enlazada. Si alguien lo está, no dude en señalarlo (o editarlo).

+1

Ese operador es como a veces he deseado || trabajó. Aunque a veces es útil tener el valor "verdadero" forzado a "1", hay otras veces que sería más útil tener el valor del primer operando distinto de cero. – supercat

4

¿Cómo es eso:

(x<value) || (x=value) 
+0

hah, nice :) +1 – jalf

+1

Alguien me gusta usar Perl :-) –

+0

* estremecimiento * Espero nunca ver eso en código real. – nmichaels

Cuestiones relacionadas