c++ ou operadores - Qual é o operador “->” em C ++?





10 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 ...

utilizados en matematicos

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?




É equivalente a

while (x-- > 0)

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

while(x > 0) {
    x = x-1;
    // logic
}



Está

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

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

       printf("%d ", x);
     }

     return 0;
}

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




while( x-- > 0 )

é como isso é analisado.




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:

x-->0

Analisa os maiores tokens:

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

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

a-----b

Após análise:

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

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.




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

#include <iostream>
int main()
{
    int x = 10;

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

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

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

é uma maneira diferente de escrever a mesma coisa.

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




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

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




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:

-->    x-->0
++>    x++>0
-->=   x-->=0
++>=   x++>=0



Por que toda a complicação?

A resposta simples para a pergunta original é apenas:

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

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;)






Related