Anexo:Operadores de C y C++

Esta es una lista de los operadores de los lenguajes de programación C y C++. Todos los operadores listados existen en C++. La tercera columna indica si también están presentes en C. También hay que tener en cuenta que C no permite la sobrecarga de operadores.

Los siguientes operadores son puntos de secuencia en ambos lenguajes (cuando no están sobrecargados): &&, ||, ?:, y , (el operador coma).

C++ también incluye los operadores de conversión de tipos const_cast, static_cast, dynamic_cast y reinterpret_cast, que no están listados en la tabla por brevedad. El formato de estos operadores significa que su nivel de precedencia no es importante.

La mayoría de los operadores presentes en C y C++ (con la excepción del operador coma y el operador flecha) también se encuentran disponibles en los lenguajes de programación Java, Perl, C# y PHP con la misma precedencia, asociatividad y semántica. Con una única excepción: la asociatividad del operador ternario en PHP es de izquierda a derecha.

Tabla

Para los objetivos de esta tabla a, b y c representan valores válidos (literales, valores de variables o valores de retorno), nombres de objetos o valores según el caso.

Nombre del operador Sintaxis Sobrecargable Incluido en C
Sumaa + bSí SíSí Sí
Suma y asignacióna += bSí SíSí Sí
Restaa - bSí SíSí Sí
Resta y asignacióna -= bSí SíSí Sí
Multiplicacióna * bSí SíSí Sí
Multiplicación y asignacióna *= bSí SíSí Sí
Divisióna / bSí SíSí Sí
División y asignacióna /= bSí SíSí Sí
Móduloa % bSí SíSí Sí
Módulo y asignacióna %= bSí SíSí Sí
Más unario (promoción entera)+aSí SíSí Sí
Menos unario (opuesto)-aSí SíSí Sí
Incremento prefijo++aSí SíSí Sí
Incremento postfijoa++Sí SíSí Sí
Decremento prefijo--aSí SíSí Sí
Decremento postfijoa--Sí SíSí Sí


Nombre del operador Sintaxis Sobrecargable Incluido en C
Menor quea < bSí SíSí Sí
Mayor quea > bSí SíSí Sí
Menor o igual quea <= bSí SíSí Sí
Mayor que o igual quea >= bSí SíSí Sí
Igual quea == bSí SíSí Sí
Diferente que / No igual quea != bSí SíSí Sí
Comparación a tres sentidosa <=> bSí SíNo No
Nombre del operador Sintaxis Sobrecargable Incluido en C
Negación lógica (NOT)!aSí SíSí Sí
Y lógico (AND)a && bSí SíSí Sí
O lógico (OR)a || bSí SíSí Sí
Nombre del operador Sintaxis Sobrecargable Incluido en C
Desplazamiento a la izquierdaa << bSí SíSí Sí
Asignación con desplazamiento a la izquierdaa <<= bSí SíSí Sí
Desplazamiento a la derechaa >> bNo NoSí Sí
Asignación con desplazamiento a la derechaa >>= bSí SíSí Sí
Complemento a uno~aSí SíSí Sí
AND binarioa & bSí SíSí Sí
Asignación con AND binarioa &= bSí SíSí Sí
OR binarioa | bSí SíSí Sí
Asignación con OR binarioa |= bSí SíSí Sí
XOR binarioa ^ bSí SíSí Sí
Asignación con XOR binarioa ^= bSí SíSí Sí
Nombre del operador Sintaxis Sobrecargable Incluido en C
Asignación básicaa = bSí SíSí Sí
Llamada a funcióna()Sí SíSí Sí
Índice de Arraya[b]Sí SíSí Sí
Indirección (Desreferencia)*aSí SíSí Sí
Dirección de (Referencia) (supresor de dereferencing)&aSí SíSí Sí
Miembro de punteroa->bSí SíSí Sí
Miembroa.bNo NoSí Sí
Desreferencia a miembro por punteroa->*bSí SíNo No
Desreferencia a miembro por objetoa.*bNo NoNo No
Conversión de tipo(tipo) aSí SíSí Sí
Comaa , bSí SíSí Sí
Condicional ternarioa ? b : cNo NoSí Sí
Resolución de ámbitoa::bNo NoNo No
Puntero a función miembroa::*bNo NoNo No
Tamaño de objetosizeof a
sizeof(tipo)
No NoSí Sí
Identificación de tipotypeid(a)
typeid(tipo)
No NoNo No
Asignar almacenamientonew tipoSí SíNo No
Asignar almacenamiento (Vector)new tipo[n]Sí SíNo No
Desasignar almacenamientodelete aSí SíNo No
Desasignar almacenamiento (Vector)delete[] aSí SíNo No

Extensiones del lenguaje

Nombre del operador Sintaxis Sobrecargable Incluido en C Compilador
Dirección de la etiqueta&& etiquetaNo NoSí SíGCC / G++
Obtener tipotypeof a
typeof(expr)
No NoSí SíGCC / G++
min y maxa <? b
a >? b
No NoNo NoG++

Precedencia de operadores

La tabla siguiente es una lista que muestra el orden de precedencia y la asociatividad de todos los operadores del lenguaje de programación C++. Están listados de arriba abajo por orden de precedencia descendente y con la misma descendencia en la misma celda (puede haber varias filas de operadores en la misma celda). La precedencia de los operadores no cambia por la sobrecarga.

Una tabla de precedencias, aunque adecuada, no puede resolver todos los detalles. Por ejemplo, el operador ternario permite expresiones arbitrarias como operador central independientemente de la precedencia del resto de operadores. Así a ? b , c : d es interpretado como a ? (b, c) : d en vez de (a ? b), (c : d). También hay que tener en cuenta que el resultado sin paréntesis de una expresión de conversión en C no puede ser el operando de sizeof. Por eso sizeof (int) * x es interpretado como (sizeof(int)) * x y no como sizeof ((int) *x).

Operador Descripción Asociatividad
:: Resolución de ámbito (solo C++) Izquierda a derecha
++ --
()
[]
.
->
typeid()

const_cast
dynamic_cast
reinterpret_cast
static_cast

Post- incremento y decremento
Llamada a función
Elemento de vector
Selección de elemento por referencia
Selección de elemento con puntero
Información de tipo en tiempo de ejecución (solo C++)

Conversión de tipo (solo C++)
Conversión de tipo (solo C++)
Conversión de tipo (solo C++)
Conversión de tipo (solo C++)

++ --
+ -
! ~
(type)
*
&
sizeof
new new[]
delete delete[]
Pre- incremento y decremento
Suma y resta unitaria
NOT lógico y NOT binario
Conversión de tipo
Indirección
Dirección de
Tamaño de
Asignación dinámica de memoria (solo C++)
Desasignación dinámica de memoria (solo C++)
Derecha a izquierda
.* ->* Puntero a miembro (solo C++) Izquierda a derecha
* / % Multiplicación, división y módulo
+ - Suma y resta
<< >> Operaciones binarias de desplazamiento
< <=
> >=
Operadores relaciones "menor que", "menor o igual que", "mayor que" y "mayor o igual que"
== != Operadores relaciones "igual a" y "distinto de"
& AND binario
^ XOR binario
| OR binario
&& AND lógico
|| OR lógico
c?t:f Operador ternario Derecha a izquierda
=
+= -=
*= /= %=
<<= >>=
&= ^= |=
Asignaciones
throw Operador Throw (lanzamiento de excepciones, solo C++)
, Este es el operador de menor prioridad en C. Sirve para separar una colección de expresiones, que se irán evaluando de izquierda a derecha Izquierda a derecha