La prioridad , el rango o la antigüedad de una operación u operador es una propiedad formal de un operador/operación que afecta el orden de su ejecución en una expresión con varios operadores diferentes en ausencia de una indicación explícita (mediante paréntesis) del orden en que se ejecutan. son evaluados. Por ejemplo, la operación de multiplicación suele tener mayor prioridad que la operación de suma, por lo que la expresión recibirá primero el producto y , y luego la suma.
Las operaciones pueden tener la misma precedencia, en cuyo caso se evalúan según la regla de asociatividad establecida para estas operaciones.
En los sistemas formales , hay dos formas de establecer la precedencia de cualquier operador. El primero es la distribución de todos los operadores según la jerarquía de prioridad. Este método siempre se usa para establecer prioridades predeterminadas y se fija en la descripción del idioma en forma de un acuerdo de que a tal o cual operador se le asignan tal o cual prioridad. No recibe ningún reflejo en la sintaxis del lenguaje, es decir, no utiliza ningún medio explícito (= esos/otros símbolos) para indicar la prioridad de la operación.
El segundo método permite cambiar las prioridades predeterminadas especificándolas explícitamente mediante caracteres de paréntesis emparejados. Al mismo tiempo, la profundidad de anidamiento es directamente proporcional al valor de prioridad, es decir, más corchetes internos indican una prioridad más alta que los externos que los enmarcan. En el ejemplo anterior con la suma y el producto, se puede cambiar el orden de cálculo usando paréntesis, escribiendo toda la expresión así: o así: .
La precedencia de las operaciones es el orden en que se realizan las operaciones en la expresión, siempre que no haya una indicación explícita del orden en que se realizan las operaciones en la expresión (utilizando paréntesis).
Si las operaciones tienen la misma prioridad, entonces el orden de ejecución de dichas operaciones se determina de acuerdo con la propiedad de asociatividad.
La asociatividad es la dirección de ejecución de las operaciones si las operaciones tienen la misma prioridad:
Una prioridad | Operación | Asociatividad | Descripción |
---|---|---|---|
una | :: | de izquierda a derecha | operación de resolución de alcance unario |
[ ] | operación de indexación | ||
() | entre paréntesis | ||
. | acceder a un miembro de una estructura o clase | ||
-> | acceder a un miembro de una estructura o clase a través de un puntero | ||
2 | ++ | de izquierda a derecha | incremento de sufijo |
— | decremento postfijo | ||
3 | ++ | de derecha a izquierda | incremento de prefijo |
— | prefijo decremento | ||
cuatro | * | de izquierda a derecha | multiplicación |
/ | división | ||
% | resto de la división | ||
5 | + | de izquierda a derecha | suma |
— | sustracción | ||
6 | >> | de izquierda a derecha | Giro a la derecha |
<< | desplazar a la izquierda | ||
7 | < | de izquierda a derecha | menos |
<= | menor o igual | ||
> | más | ||
>= | mayor que o igual | ||
ocho | == | de izquierda a derecha | es igual |
!= | no es igual | ||
9 | && | de izquierda a derecha | Y lógico |
diez | || | de izquierda a derecha | O lógico |
once | ?: | de derecha a izquierda | operación condicional (operación ternaria) |
12 | = | de derecha a izquierda | asignación |
*= | multiplicación con asignación | ||
/= | división con asignación | ||
%= | resto de división con asignación | ||
+= | adición con asignación | ||
-= | resta con asignación | ||
13 | , | de izquierda a derecha | coma |
En caso de duda, se deben utilizar paréntesis. En algunos casos, la precedencia de operadores puede tener efectos implícitos. Considere un ejemplo:
entero n = 5 ; cout << n += 3 ;A pesar de la obviedad del código para un ser humano, el compilador generará un error: en la expresión de la línea 2, el operador de desplazamiento bit a bit (<<) se ejecutará primero. su precedencia es 6 y es más alta que la precedencia del operador de suma y asignación (+=) 12. Como resultado, el valor de la variable n se pasará al flujo cout y la operación += no será realizado.