Was ist der Operator "->" in C ++? [c++]


Answers

Das ist ein sehr komplizierter Betreiber, so dass auch ISO / IEC JTC1 (Joint Technical Committee 1) seine Beschreibung in zwei verschiedenen Teilen des C ++ - Standards platziert hat.

Scherz beiseite, sind sie zwei verschiedene Betreiber: -- und > beschrieben in § 5.2.6 / 2 und §5.9 der C ++ 03 Standard.

Question

Nach dem Lesen von versteckten Features und dunklen Ecken von C ++ / STL auf comp.lang.c++.moderated , war ich völlig überrascht, dass das folgende Snippet kompiliert und arbeitete sowohl in Visual Studio 2008 als auch in G ++ 4.4.

Hier ist der Code:

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

Ich würde davon ausgehen, das ist C, da es auch in GCC funktioniert. Wo ist das in der Norm definiert und woher kommt es?




Es ist gleichbedeutend mit

while (x-- > 0)



Seine

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

     while( x-- > 0 ) // x goes to 0
     {
       printf("%d ", x);
     }

     return 0;
}

Nur der Raum macht die Sachen komisch, -- dekrementiert und vergleicht.




while( x-- > 0 )

Ist, wie das geparkt ist




Äußerer Aussenseiter, aber ich werde das benutzen:

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



Wie auch immer, wir haben einen "geht" Bediener jetzt. "-->" ist leicht zu erinnern, als eine Richtung, und "während x geht auf Null" ist Sinn-gerade.

Darüber hinaus ist es ein wenig effizienter als "for (x = 10; x > 0; x --)" auf einigen Plattformen.




Mein Compiler wird ausdrucken 9876543210 wenn ich diesen Code ausführen.

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

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

Wie erwartet. Die while( x-- > 0 ) bedeutet eigentlich, while( x > 0) . Die x-- post dekrementiert x .

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

Ist eine andere Art, das Gleiche zu schreiben.

Es ist schön, dass das Original aussieht wie "while x geht auf 0" though.




-- ist der dekrementoperator und > ist der größer als der betreiber

Die beiden Operatoren werden als einzeln angewendet --> .




Es ist eine Kombination von zwei Betreibern. Zuerst -- zum Dekrementieren des Wertes, und > ist zu prüfen, ob der Wert größer ist als der rechte Operand.

#include<stdio.h>

int main()
{
    int x = 10;

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

    return 0;
}

Der Ausgang wird sein:

9 8 7 6 5 4 3 2 1 0            



Warum all die Komplikation?

Die einfache Antwort auf die ursprüngliche Frage ist nur:

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

Macht dasselbe. Ich sage nicht, dass du es so machen solltest, aber das tut dasselbe und hätte die Frage in einem Beitrag beantwortet.

Die x- ist nur kurzschrift für die oben, und> ist nur ein normaler größer als betreiber. Kein großes Geheimnis!

Es gibt zu viele Leute, die heutzutage einfache Dinge kompliziert machen;)