[c++] Qual è l'operatore "->" in C ++?



9 Answers

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. ...

Question

Dopo aver letto Hidden Features e Dark Corners di C ++ / STL su comp.lang.c++.moderated , sono rimasto completamente sorpreso dal fatto che il seguente snippet fosse compilato e funzionasse 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?




-- è l'operatore di decremento e > è l'operatore maggiore di .

I due operatori sono applicati come uno solo --> .




Ad ogni modo, abbiamo un operatore "va a" ora. "-->" è facile da ricordare come una direzione e "mentre x va a zero" ha un significato diretto.

Inoltre, è un po 'più efficiente di "for (x = 10; x > 0; x --)" su alcune piattaforme.




È equivalente a

while (x-- > 0)



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;
}



In realtà, x è post-decremento e con quella condizione viene controllato. Non è --> , è (x--) > 0

Nota: il valore di x viene modificato dopo che la condizione è stata verificata, in quanto post-decremento. Alcuni casi simili possono anche verificarsi, ad esempio:

-->    x-->0
++>    x++>0
-->=   x-->=0
++>=   x++>=0



Perché tutte le complicazioni?

La semplice risposta alla domanda originale è solo:

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

Fa la stessa cosa Non dicendo che dovresti farlo in questo modo, ma fa la stessa cosa e avrebbe risposto alla domanda in un solo post.

La x-- è semplicemente una scorciatoia per quanto sopra, e> è solo un normale operatore maggiore di. Nessun grande mistero!

Ci sono troppe persone che rendono semplici le cose semplici oggigiorno;)




Il mio compilatore stamperà 9876543210 quando eseguo questo codice.

#include <iostream>
int main()
{
    int x = 10;

    while( x --> 0 ) // x goes to 0
    {
        std::cout << x;
    }
}

Come previsto. Il while( x-- > 0 ) realtà significa while( x > 0) . Il x-- post decrementa x .

while( x > 0 ) 
{
    x--;
    std::cout << x;
}

è un modo diverso di scrivere la stessa cosa

È bello che l'originale abbia l'aspetto di "mentre x va a 0".




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 confronti > .




while( x-- > 0 )

è come viene analizzato.




Related