Frage Was ist der Operator "->" in C ++?


Nach dem Lesen Versteckte Funktionen und dunkle Ecken von C ++ / STL auf comp.lang.c++.moderatedIch war völlig überrascht, dass der folgende Code in Visual Studio 2008 und G ++ 4.4 kompiliert und bearbeitet wurde.

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 annehmen, dass dies C ist, da es auch in GCC funktioniert. Wo ist das im Standard definiert und woher kommt es?


7773


Ursprung


Antworten:


--> ist kein Operator. Es ist in der Tat zwei getrennte Betreiber, -- und >.

Der Code der Bedingung wird dekrementiert x, während der Rückkehr xist der ursprüngliche (nicht dekrementierte) Wert und vergleicht dann den ursprünglichen Wert mit 0 Verwendung der > Operator.

Zum besseren Verständnis könnte die Aussage wie folgt geschrieben werden:

while( (x--) > 0 )

7470



Oder für etwas ganz anderes ... x gleitet auf 0

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

Nicht so mathematisch, aber ... jedes Bild sagt mehr als tausend Worte. ...


2373



Das ist ein sehr komplizierter Operator, also sogar ISO / IEC JTC1 (Gemeinsames Technisches Komitee 1) hat seine Beschreibung in zwei verschiedene Teile des C ++ Standards gestellt.

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


2221



Es ist gleichbedeutend mit

while (x-- > 0)

1142



x kann in umgekehrter Richtung noch schneller gegen Null gehen:

int x = 10;

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

8 6 4 2

Sie können die Geschwindigkeit mit einem Pfeil steuern!

int x = 100;

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

90 80 70 60 50 40 30 20 10

;)


859



Es ist

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

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

       printf("%d ", x);
     }

     return 0;
}

Nur der Raum lässt die Dinge lustig aussehen, -- dekrementiert und > vergleicht.


498



Die Verwendung von --> hat historische Relevanz. Dekrementierung war (und ist in manchen Fällen immer noch), schneller als die x86-Architektur zu inkrementieren. Verwenden --> schlägt vor, dass x wird 0und appelliert an diejenigen mit mathematischen Hintergründen.


371



while( x-- > 0 )

ist, wie das geparst ist.


324