Pregunta ¿Cuál es el operador "->" en C ++?


Despues de leer Funciones ocultas y esquinas oscuras de C ++ / STL en comp.lang.c++.moderated, Me sorprendió por completo que el siguiente fragmento compilado y funcionado tanto en Visual Studio 2008 como en G ++ 4.4.

Aquí está el código:

#include <stdio.h>
int main()
{
    int x = 10;
    while (x --> 0) // x goes to 0
    {
        printf("%d ", x);
    }
}

Asumo que esto es C, ya que también funciona en GCC. ¿Dónde se define esto en el estándar y de dónde viene?


7773


origen


Respuestas:


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

El código condicional decrementa x, mientras regresas xes el valor original (no decrementado), y luego compara el valor original con 0 utilizando el > operador.

Para comprender mejor, la declaración se puede escribir de la siguiente manera:

while( (x--) > 0 )

7470



O por algo completamente diferente ... x diapositivas a 0

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

No es tan matemático, pero ... cada imagen pinta mil palabras. ...


2373



Es 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 > descritos respectivamente en §5.2.6 / 2 y §5.9 del Estándar C ++ 03.


2221



Es equivalente a

while (x-- > 0)

1142



x puede ir a cero incluso más rápido en la dirección opuesta:

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

;)


859



Sus

#include <stdio.h>
int main(void){
     int x = 10;

     while( x-- > 0 ){ // x goes to 0

       printf("%d ", x);
     }

     return 0;
}

Solo el espacio hace que las cosas se vean divertidas, -- decrementos y > compara


498



El uso de --> tiene relevancia histórica. El decremento fue (y aún lo es en algunos casos) más rápido que el incremento en la arquitectura x86. Utilizando --> sugiere que x va a 0, y atrae a aquellos con antecedentes matemáticos.


371



while( x-- > 0 )

es cómo eso es analizado.


324



Absolutamente geek, pero usaré esto:

#define as ;while

int main(int argc, char* argv[])
{
    int n = atoi(argv[1]);
    do printf("n is %d\n", n) as ( n --> 0);
    return 0;
}

291



Un libro que leí (no recuerdo correctamente qué libro) declaró: Los compiladores intentan analizar expresiones al token más grande usando la regla de la derecha izquierda.

En este caso, la expresión:

x-->0

Parses a tokens más grandes:

token 1: x
token 2: --
token 3: >
token 4: 0
conclude: x-- > 0

La misma regla se aplica a esta expresión:

a-----b

Después de analizar:

token 1: a
token 2: --
token 3: --
token 4: -
token 5: b
conclude: (a--)-- - b

Espero que esto ayude a entender la expresión complicada ^^


283