[c++] Qual é o operador “->” em C ++?


9 Answers

Ou para algo completamente diferente ... x slides para 0

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

Não é tão matemático, mas ... toda foto pinta mil palavras ...

Question

Depois de ler Hidden Features e Dark Corners de C ++ / STL em comp.lang.c++.moderated , fiquei completamente surpreso com o seguinte trecho compilado e trabalhado no Visual Studio 2008 e no G ++ 4.4.

Aqui está o código:

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

Eu suponho que isso é C, já que funciona no GCC também. Onde isso é definido no padrão e de onde vem?




Está

while( x-- > 0 )

Apenas o espaço faz as coisas parecerem engraçadas -- diminui e compara.




Na verdade, x é pós-decremento e com essa condição está sendo verificada. Não é --> , é (x--) > 0

Nota: o valor de x é alterado após a verificação da condição, porque é pós-decremento. Alguns casos semelhantes também podem ocorrer, por exemplo:

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



-- é o operador decremento e > é o operador maior que .

Os dois operadores são aplicados como um único como --> .




Meu compilador imprimirá 9876543210 quando eu executar esse código.

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

Como esperado. O while( x-- > 0 ) while( x > 0) na verdade significa while( x > 0) . O x pós decrementa x .

#include<stdio.h>

int main()
{
    int x = 10;

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

    return 0;
}

é uma maneira diferente de escrever a mesma coisa.

É legal que o original pareça "while x vai para 0".




Um livro que eu li (não me lembro corretamente de qual livro) afirmou: Os compiladores tentam analisar expressões para o maior símbolo usando a regra da esquerda à direita.

Neste caso, a expressão:

token 1: x
token 2: --
token 3: >
token 4: 0
conclude: x-- > 0

Analisa os maiores tokens:

a-----b

A mesma regra aplica-se a esta expressão:

token 1: a
token 2: --
token 3: --
token 4: -
token 5: b
conclude: (a--)-- - b

Após análise:

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

Espero que isso ajude a entender a expressão complicada ^^




De qualquer forma, temos um operador "vai para" agora. "-->" é fácil de ser lembrado como uma direção, e "enquanto x vai para zero" é o significado direto.

Além disso, é um pouco mais eficiente do que "for (x = 10; x > 0; x --)" em algumas plataformas.




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

é como isso é analisado.




Por que toda a complicação?

A resposta simples para a pergunta original é apenas:

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

Faz a mesma coisa. Não estou dizendo que você deveria fazer assim, mas faz a mesma coisa e teria respondido a pergunta em um post.

O x-- é apenas uma abreviação para o acima, e > é apenas um operator maior que o normal. Nenhum grande mistério!

Há muita gente fazendo coisas simples complicadas hoje em dia;)




É equivalente a

while (x-- > 0)

x-- (post decrement) é equivalente a x = x-1 , então o código se transforma em:

int x = 10;

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





Related