Вопрос: Что такое оператор «->» в C ++?


После прочтения Скрытые функции и темные углы C ++ / STL на comp.lang.c++.moderated, Я был полностью удивлен тем, что следующий фрагмент скомпилирован и работал как в Visual Studio 2008, так и в G ++ 4.4.

Вот код:

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

Я бы предположил, что это C, так как он работает и в GCC. Где это определено в стандарте и откуда оно взялось?


7674


источник


Ответы:


-->не является оператором. Фактически это два отдельных оператора, --а также >,

Условные сокращения кода x, возвращаясь x(не уменьшенное) значение, а затем сравнивает исходное значение с 0используя >оператор.

Чтобы лучше понять, заявление можно было бы написать следующим образом:

while( (x--) > 0 )

7384



Или для чего-то совершенно другого ... x слайдов до 0

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

Не так математично, но ... каждая картина рисует тысячу слов. ...


2309



Это очень сложный оператор, поэтому даже ISO / IEC JTC1 (Совместный технический комитет 1) разместил свое описание в двух разных частях стандарта C ++.

Шутя в сторону, это два разных оператора: --а также >описанных соответственно в п. 5.2.6 / 2 и §5.9 стандарта C ++ 03.


2213



Это эквивалентно

while (x-- > 0)

1131



x can go to zero even faster in the opposite direction:

int x = 10;

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

8 6 4 2

You can control speed with an arrow!

int x = 100;

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

90 80 70 60 50 40 30 20 10

;)


839



It's

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

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

       printf("%d ", x);
     }

     return 0;
}

Just the space make the things look funny, -- decrements and > compares.


494



The usage of --> has historical relevance. Decrementing was (and still is in some cases), faster than incrementing on the x86 architecture. Using --> suggests that x is going to 0, and appeals to those with mathematical backgrounds.


370



while( x-- > 0 )

is how that's parsed.


321



Utterly geek, but I will be using this:

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

283