Что такое оператор "->" в C ++? - PullRequest
8357 голосов
/ 29 октября 2009

Прочитав Скрытые функции и темные углы 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. Где это определено в стандарте и откуда оно взято?

Ответы [ 21 ]

23 голосов
/ 28 мая 2017

Традиционным способом мы определяем условие в скобках while () и условие завершения внутри фигурных скобок {}, но --> определяет оба сразу.

Например:

int abc(void)
{
    int a = 5
    while((a--) > 0) // Decrement and comparison both at once
    {
        // Code
    }
}

Это уменьшает a и запускает цикл, в то время как a больше 0.

Условно это будет выглядеть так:

int abc(void)
{
    int a = 5;
    while(a > 0)
    {
        a--;
        // Code
    }
    a--;
}

В обоих направлениях мы делаем одно и то же и достигаем одинаковых целей.

...