¿Qué es el operador '-->' en C/C++?

Resuelto GManNickG asked hace 15 años • 26 respuestas

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?

GManNickG avatar Oct 29 '09 13:10 GManNickG
Aceptado

-->no es un operador. De hecho, son dos operadores separados --y >.

El código en la condición disminuye x, mientras devuelve xel valor original (no disminuido) y luego compara el valor original usando 0el >operador.

Para entenderlo mejor, la declaración podría escribirse de la siguiente manera:

while( (x--) > 0 )
Bradley Mackey avatar Oct 29 '2009 07:10 Bradley Mackey

O para algo completamente diferente... xpasa a 0.

while (x --\
            \
             \
              \
               > 0)
     printf("%d ", x);

No es tan matemático, pero... cada imagen vale más que mil palabras...

unsynchronized avatar Jan 18 '2012 11:01 unsynchronized

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.

Kirill V. Lyadvinsky avatar Oct 29 '2009 08:10 Kirill V. Lyadvinsky

xpuede 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

;)

mip avatar Dec 28 '2014 00:12 mip

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
Shubham avatar Oct 29 '2009 07:10 Shubham

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.

RageZ avatar Oct 29 '2009 07:10 RageZ