Cómo leer una compleja expresión de c ++

C ++ está llena de pequeños símbolos, cada uno de los cuales se suma al significado de las expresiones. Las reglas de la gramática C ++ son tan flexibles que estos símbolos se pueden combinar en combinaciones casi impenetrable complejos. Las expresiones en el lenguaje C más simple puede ser tan obtuso que solía haber un concurso anual para que pudiera escribir el programa más oscura y que podría entenderlo.

Nunca es una buena idea para tratar de escribir código complejo pero a veces se ejecutará a través de expresiones en C ++ que son un poco desconcertante a primera vista. Sólo tiene que utilizar los siguientes pasos para descifrarlos:

  1. Comience en el paréntesis más integrados.

    Comience a buscar el mayor número de paréntesis exteriores. Dentro de ellos, buscar paréntesis incrustados. Repita el proceso hasta que haya trabajado su camino a la pareja más profundo de paréntesis. Comience evaluando que subexpresión primero usando las siguientes reglas. Una vez que entienda que la expresión, el pop de vuelta a un nivel superior y repita el proceso.

  2. En el par de paréntesis, evaluar cada operación en orden de precedencia.

    El orden en que se evalúan los operadores está determinada por la precedencia del operador se muestra en la tabla. Indirección viene antes de la multiplicación que viene antes de la adición de este modo la siguiente suma 1 más 2 veces el valor apuntado por ptr *.

int i = 1 + 2 * * ptr-
Los operadores en orden de precedencia
PrecedenciaOperadorSignificado
1() (Unario)Invoca una función
2* Y -> (unario)Referencia a un puntero
2- (unario)Devuelve el negativo de su argumento
3++ (unario)Incremento
3-- (unario)Disminuir
4* (Binario)Multiplicación
4/ (Binario)División
4% (Binario)Modulo
5+ (binario)Adición
5- (binario)Resta
6 (binario)Y lógico
6!!OR lógico
7=, * =,% =, + =, - = (Especial)Tipos de asignación
  1. Evaluar las operaciones de la misma precedencia de izquierda a derecha (excepto la asignación, que va a la inversa).

    La mayoría de los operadores de la misma precedencia evalúan de izquierda a derecha. Así, la siguiente añade 1 a 2 y suma el resultado a 3:

    int i = 1 + 2 + 3

    El orden de evaluación de algunos operadores no importa. Por ejemplo, la adición funciona de la misma de izquierda a derecha como lo hace de derecha a izquierda. El orden de evaluación hace una gran diferencia para algunas operaciones como división. Los siguientes divisiones 8 por 4 y divide el resultado por 2:

    int i = 8/4 / 2-

    La principal excepción a esta regla es la asignación, que se evalúa de derecha a izquierda:

    a = b = c-

    Esto asigna C a B y el resultado a una.

  2. Evaluar subexpresiones en ningún orden en particular.

    Considere la siguiente expresión:

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

    Multiplicación tiene mayor precedencia, por lo que podría suponer que la función g () y h () se llaman antes de f (), sin embargo, este no es el caso. Llamada de función tiene la más alta prioridad de todos, por lo que las tres funciones se llaman antes de realizar cualquiera de la multiplicación o la adición. (Los resultados volvieron de g () y h () se multiplican y luego añaden a los resultados de regresar de f ()).

    La única vez que el orden en que las funciones se llaman marca la diferencia es cuando la función tiene efectos secundarios tales como la apertura de un archivo o cambiar el valor de una variable global. Definitivamente, usted no debe escribir sus programas a fin de que dependen de este tipo de efectos secundarios.

  3. Sólo Realizar cualquier conversión de tipo cuando sea necesario.

    Usted no debe hacer más conversiones de tipos de lo absolutamente necesario. Por ejemplo, la siguiente expresión tiene al menos tres y posiblemente cuatro conversiones de tipos:

    flotar f = 'a' + 1-

    El carbón 'a' debe ser promovido a un int para realizar la adición. El int se convierte entonces en un doble y luego hacia abajo convertido a un solo flotador precisión. Recuerde que toda la aritmética se realiza ya sea en int o double. En general, usted debe evitar realizar aritmética de los tipos de caracteres y evitar solo flotador de precisión por completo.




» » » » Cómo leer una compleja expresión de c ++