¿Qué es el operador '-->' en C/C++?
Después de leer Funciones ocultas y rincones oscuros de C++/STL en comp.lang.c++.moderated
, me sorprendió completamente que el siguiente fragmento se compilara y funcionara tanto en Visual Studio 2008 como en G++ 4.4. Supongo que esto también es C válido ya que también funciona en GCC.
Aquí está el código:
#include <stdio.h>
int main()
{
int x = 10;
while (x --> 0) // x goes to 0
{
printf("%d ", x);
}
}
Producción:
9 8 7 6 5 4 3 2 1 0
¿Dónde se define esto en la norma y de dónde viene?
-->
no es un operador. De hecho, son dos operadores separados --
y >
.
El código en la condición disminuye x
, mientras devuelve x
el valor original (no disminuido) y luego compara el valor original usando 0
el >
operador.
Para entenderlo mejor, la declaración podría escribirse de la siguiente manera:
while( (x--) > 0 )
O para algo completamente diferente... x
pasa a 0
.
while (x --\
\
\
\
> 0)
printf("%d ", x);
No es tan matemático, pero... cada imagen vale más que mil palabras...
Se trata de un operador muy complicado, por lo que incluso ISO/IEC JTC1 (Comité Técnico Conjunto 1) colocó su descripción en dos partes diferentes del estándar C++.
Bromas aparte, son dos operadores diferentes: --
y >
se describen respectivamente en §5.2.6/2 y §5.9 del Estándar C++03.
x
puede llegar a cero aún más rápido en la dirección opuesta en C++:
int x = 10;
while( 0 <---- x )
{
printf("%d ", x);
}
8 6 4 2
¡Puedes controlar la velocidad con una flecha!
int x = 100;
while( 0 <-------------------- x )
{
printf("%d ", x);
}
90 80 70 60 50 40 30 20 10
;)
Es equivalente a
while (x-- > 0)
x--
(post decremento) es equivalente a x = x-1
(pero devuelve el valor original de x
), por lo que el código se transforma a:
while(x > 0) {
x = x-1;
// logic
}
x--; // The post decrement done when x <= 0
Es
#include <stdio.h>
int main(void) {
int x = 10;
while (x-- > 0) { // x goes to 0
printf("%d ", x);
}
return 0;
}
Sólo el espacio hace que las cosas parezcan divertidas, --
disminuye y >
se compara.