Está en la página 1de 4

Operadores de C++, precedencia y

asociatividad
El lenguaje C++ incluye todos los operadores de C y agrega varios operadores nuevos.
Los operadores especifican una evaluación que se realizará en uno o más operandos.
La prioridad de los operadores especifica el orden en que se realizan las operaciones en
las expresiones que contienen más de un operador. La asociatividad de los operadores
especifica si, en una expresión que contiene varios operadores con la misma prioridad, un
operando se agrupa con el de su izquierda o con el de su derecha. La tabla siguiente
muestra la prioridad y la asociatividad de los operadores de C++ (de mayor a menor
prioridad). Los operadores que tienen el mismo número de prioridad tienen la misma
prioridad, a menos que se fuerce otra relación explícitamente mediante paréntesis.

Prioridad y asociatividad de los operadores de C++


Descripción del operador Operador
Group 1 precedence, no associativity
Resolución de ámbito ::
Group 2 precedence, left to right associativity
Selección de miembro (objeto o puntero) . or –>
Subíndice de matriz [ ]
Llamada a función ( )
Incremento de postfijo ++
Decremento de postfijo ––
Nombre de tipo typeid( )
Conversión de tipos constante const_cast
Conversión de tipos dinámica dynamic_cast
Conversión de tipos reinterpretada reinterpret_cast
Conversión de tipos estática static_cast
Group 3 precedence, right to left associativity
Tamaño de objeto o tipo sizeof
Incremento de prefijo ++
Decremento de prefijo ––
Complemento a uno ~
NOT lógico !
Negación unaria -
Unario más +
Dirección de &
Direccionamiento indirecto *
Crear objeto new
Destruir objeto delete
Conversión de tipos explícita Cast: ()
Group 4 precedence, left to right associativity
Puntero a miembro (objetos o punteros) .* or –>*
Group 5 precedence, left to right associativity
Multiplicación *
División /
Módulo %
Group 6 precedence, left to right associativity
Adición +
Resta –
Descripción del operador Operador
Group 7 precedence, left to right associativity
Desplazamiento a la izquierda <<
Desplazamiento a la derecha >>
Group 8 precedence, left to right associativity
Menor que <
Mayor que >
Menor o igual que <=
Mayor o igual que >=
Group 9 precedence, left to right associativity
Igualdad ==
Desigualdad !=
Group 10 precedence left to right associativity
AND bit a bit &
Group 11 precedence, left to right associativity
OR exclusivo bit a bit ^
Group 12 precedence, left to right associativity
OR inclusivo bit a bit &#124;
Group 13 precedence, left to right associativity
AND lógico &&
Group 14 precedence, left to right associativity
OR lógico &#124;&#124;
Group 15 precedence, right to left associativity
Condicional ? :
Group 16 precedence, right to left associativity
Asignación =
Asignación y multiplicación *=
Asignación y división /=
Asignación y módulo %=
Asignación y suma +=
Asignación y resta –=
Asignación y desplazamiento a la izquierda <<=
Asignación y desplazamiento a la derecha >>=
Asignación AND bit a bit &=
Asignación OR inclusivo bit a bit &#124;=
Asignación OR exclusivo bit a bit ^=
Group 17 precedence, right to left associativity
Expresión Throw throw
Group 18 precedence, left to right associativity
Coma ,
Precedencia de operadores
La interpretación de cualquier expresión en C++ está determinada por la precedencia y
asociatividad de los operadores en dicha expresión. Cada operador tiene una precedencia, y
los operadores en una expresión se evalúan en orden de mayor a menor precedencia. La
evaluación de operadores con la misma precedencia viene determinada por su asociatividad.
Y, al igual que en matemáticas, los paréntesis anulan las reglas de precedencia.
En la siguiente tabla se listan los operadores en C++, su precedencia y su asociatividad. Los
operadores se listan en orden de prioridad decreciente (los situados más arriba tienen mayor
prioridad). Los operadores en la misma línea horizontal tienen la misma precedencia.

Operador Propósito Asociatividad

:: Scope (unario) De derecha a izquierda

:: Scope (binario) De izquierda a derecha

-> . Selección de miembros De izquierda a derecha

[] Índices De izquierda a derecha

() Llamada a función De izquierda a derecha

++ Postincremento De izquierda a derecha

-- Postdecremento De izquierda a derecha

sizeof Tamaño de un objeto De derecha a izquierda

++ Preincremento De derecha a izquierda

-- Predecremento De derecha a izquierda

*&+-!~ Operadores unarios De derecha a izquierda

new Crea un objeto De derecha a izquierda

delete Borra un objeto De derecha a izquierda

() Conversión de tipo (type cast) De derecha a izquierda

->* .* Puntero a un miembro De izquierda a derecha

*/% Operadores multiplicativos De izquierda a derecha

+- Operadores aditivos De izquierda a derecha

<< >> Operadores bitwise De izquierda a derecha

< > <= >= Operadores de relación De izquierda a derecha


== != Operadores de igualdad De izquierda a derecha

& Y bitwise De izquierda a derecha

^ bitwise O exclusivo De izquierda a derecha

| bitwise O inclusivo De izquierda a derecha

&& Y lógico De izquierda a derecha

|| O lógico De izquierda a derecha

?: Operador condicional De derecha a izquierda

= *= /= += -= >*gt;=
Operadores de asignación De derecha a izquierda
&= ^= |= %= <<=

, Operador coma De derecha a izquierda

En C++ las reglas de precedencia y asociatividad de operadores corresponden a las


reglas matemáticas. Sin embargo, esto no funcionará, por ejemplo, con los operadores
bitwise. Para tales operadores, se debe utilizar la tabla anterior, o bien paréntesis.