" in C ++?'/> " in C ++?'/> " in C ++?'/> Qual è l'operatore "->" in C ++? | webgamecafe.com

Domanda Qual è l'operatore "->" in C ++?


Dopo aver letto Funzionalità nascoste e Dark Corners di C ++ / STL  sopra comp.lang.c++.moderatedSono rimasto completamente sorpreso dal fatto che il seguente frammento di codice abbia compilato e lavorato sia in Visual Studio 2008 che in G ++ 4.4.

Ecco il codice:

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

Presumo che questo sia C, visto che funziona anche in GCC. Dove è definito nello standard e da dove proviene?


7772


origine


risposte:


--> non è un operatore. In realtà sono due operatori separati, -- e >.

Il decremento del codice condizionale x, mentre ritorno xè il valore originale (non decrementato) e quindi confronta il valore originale con 0 usando il > operatore.

Per capire meglio, la dichiarazione potrebbe essere scritta come segue:

while( (x--) > 0 )

7467



O per qualcosa di completamente diverso ... x fa scorrere a 0

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

Non così matematico, ma ... ogni immagine dipinge un migliaio di parole. ...


2370



È un operatore molto complicato, così uniforme ISO / IEC JTC1 (Comitato tecnico congiunto 1)  ha inserito la sua descrizione in due parti diverse dello standard C ++.

A parte gli scherzi, sono due operatori diversi: -- e > descritti rispettivamente in §5.2.6 / 2 e §5.9 della norma C ++ 03.


2221



È equivalente a

while (x-- > 0)

1141



x può andare a zero ancora più velocemente nella direzione opposta:

int x = 10;

while( 0 <---- x )
{
   printf("%d ", x);
}

8 6 4 2

Puoi controllare la velocità con una freccia!

int x = 100;

while( 0 <-------------------- x )
{
   printf("%d ", x);
}

90 80 70 60 50 40 30 20 10

;)


857



Suo

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

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

       printf("%d ", x);
     }

     return 0;
}

Proprio lo spazio fa sembrare le cose divertenti, -- decrementi e > a confronto.


498



L'uso di --> ha rilevanza storica. Il decremento era (e lo è ancora in alcuni casi), più veloce dell'incremento sull'architettura x86. utilizzando --> suggerisce che x sta per 0e fa appello a coloro che hanno background matematici.


371



while( x-- > 0 )

è come viene analizzato.


324



Assolutamente geek, ma userò questo:

#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 che ho letto (non ricordo correttamente quale libro) ha dichiarato: I compilatori cercano di analizzare le espressioni per il token più grande  usando la regola left right.

In questo caso, l'espressione:

x-->0

Analizza i token più grandi:

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

La stessa regola  si applica a questa espressione:

a-----b

Dopo l'analisi:

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

Spero che questo aiuti a capire l'espressione complicata ^^


283