À quoi sert l'opérateur --> (flèche) en C/C++?

Je code sur C++, et je suis complètement surpris que l’extrait de code suivant est compilé et est fonctionné à la fois dans Visual Studio 2008 et dans G++ 4.4.

Voici le code :

#include <stdio.h>
int main()
{
    int n = 5;
    while (n --> 0) // n va jusqu'à 0
    {
        printf("%d ", n);
    }
}

Sortie:

4 3 2 1 0

Je suppose que c’est du C, puisque cela fonctionne aussi dans GCC. Où cela est-il défini dans la norme, et d’où cela vient-il ?

→ n’est pas un opérateur. Il s’agit en fait de deux opérateurs distincts, – et >.

Le code décrémente x, tout en retournant la valeur originale de x (non décrémentée), puis compare la valeur originale à 0 en utilisant l’opérateur >.

Pour mieux comprendre, la déclaration while (n --> 0) pourrait être écrite comme suit :

while( (x--) > 0 )

C’est équivalent à:

while (x-- > 0)

x-- (post décrément) est équivalent à x = x-1 donc, le code se transforme en :

while(x > 0) {
    x = x-1;
    // code...
}
x--;   // post décrémentation effectuée lorsque x <= 0

X peut aller à zéro encore plus vite dans la direction opposée :

int x = 10;

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

Sortie:
8 6 4 2

Vous pouvez contrôler la vitesse avec une flèche !

int x = 100;

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

Sortie:
90 80 70 60 50 40 30 20 10

Quoi qu’il en soit, nous avons maintenant un opérateur « goes to ». « –> » est facile à mémoriser comme direction, et « while x goes to zero » a un sens direct.

De plus, c’est un peu plus efficace que for (x = 10 ; x > 0 ; x --) sur certaines plateformes.