Como ler uma expressão complexa c ++

C ++ é cheia de pequenos símbolos, cada um dos quais contribui para o significado de expressões. As regras de gramática C ++ são tão flexíveis que esses símbolos podem ser combinados em combinações quase impenetrável complexos. Expressões na linguagem C mais simples pode ficar tão obtuso que costumava haver um concurso anual para que pudesse escrever o programa mais obscuro e que poderia compreendê-lo.

Nunca é uma boa idéia para tentar escrever código complexo, mas às vezes você vai se deparar expressões em C ++ que são um pouco desconcertante à primeira vista. Basta usar as seguintes etapas para entendê-los:

  1. Comece com os parênteses mais incorporados.

    Comece a olhar para os exteriores maioria dos parênteses. Dentro daqueles, procure parênteses incorporados. Repita o processo até que você trabalhou seu caminho para o par mais profundo de parênteses. Começar a avaliar que subexpression primeiro usando as seguintes regras. Depois de entender que a expressão, pop de volta para o próximo nível e repita o processo.

  2. Dentro do par de parênteses, avaliar cada operação na ordem de precedência.

    A fim de que os operadores são avaliados é determinada pela prioridade do operador mostrado na tabela. Indireção vem antes de multiplicação que vem antes disso, assim, a seguir adiciona 1 mais 2 vezes o valor apontado para pelo * ptr.

int i = 1 + 2 * * ptr-
Operadores em ordem de precedência
PrecedênciaOperadorSignificado
1() (Unária)Invocar uma função
2* E -gt; (Unária)Dereference um ponteiro
2- (unária)Retorna o negativo de seu argumento
3++ (Unária)Incremento
3- (unária)diminuição
4* (binário)Multiplicação
4/ (binário)Divisão
4% (binário)Modulo
5+ (binário)Adição
5- (binário)Subtração
6&& (binário)E lógico
6!!lógico OR
7=, * =,% =, + =, - = (especial)tipos de atribuição
  1. Avaliar as operações com a mesma precedência da esquerda para a direita (exceto cessão, que vai para o outro lado).

    A maioria dos operadores da mesma precedência avaliar a partir da esquerda para a direita. Assim, a seguir adiciona 1-2 e adiciona o resultado para 3:

    int i = 1 + 2 + 3

    A ordem de avaliação de alguns operadores não importa. Por exemplo, a adição funciona da mesma da esquerda para a direita, como ele faz da direita para a esquerda. A ordem de avaliação faz muita diferença para algumas operações como divisão. Os seguintes divisões 8 por 4 e divide o resultado de 2:

    int i = 8/4 / 2-


    A principal excepção a esta regra é atribuição, que é avaliada da direita para a esquerda:

    Video: Programar em C - Desafio | Como Calcular o Fatorial de Um Número - Aula 12

    a = b = c-

    Isso atribui C para B e o resultado para um.

  2. Avaliar subexpressions em nenhuma ordem particular.

    Considere a seguinte expressão:

    int i = f () + G () * h () -

    A multiplicação tem precedência mais alta, de modo que você pode assumir que as funções g () e h () são chamados antes de f (), no entanto, este não é o caso. chamada de função tem a maior precedência de todos, para todas as três funções são chamadas quer antes da multiplicação ou a adição é realizada. (Os resultados retornados a partir g () eh () são multiplicados e, em seguida, adicionados aos resultados retornados a partir de f ().)

    Video: Matemática Básica - Aula 5 - Expressões numéricas

    A única vez que a ordem em que as funções são chamadas faz a diferença é quando a função tem efeitos colaterais, como abrir um arquivo ou alterar o valor de uma variável global. Você definitivamente não deve escrever seus programas para que eles dependem este tipo de efeitos colaterais.

  3. Executar quaisquer conversões de tipo somente quando necessário.

    Video: Curso C++ - Aula 07 - Indentação, Espaço em Branco e Ponto e Vírgula

    Você não deve fazer mais conversões de tipo do que o absolutamente necessário. Por exemplo, a seguinte expressão tem, pelo menos, três e, eventualmente, de quatro conversões de tipo:

    flutuar f = `a` + 1-

    O caractere ‘a’ deve ser promovido para um int para executar a adição. O int é então convertido para um casal e depois convertidos para um único precisão float. Lembre-se que toda a aritmética é realizada tanto em int ou dupla. Geralmente, você deve evitar a execução de aritmética em tipos de caracteres e evitar precisão simples flutuador completamente.

    Video: Operadores Lógicos e Relacionais - Curso de Algoritmos #04 - Gustavo Guanabara


Publicações relacionadas