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
[editar]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.
Operadores aritméticos[editar] | |||
Nombre del operador | Sintaxis | Sobrecargable | Incluido en C |
---|---|---|---|
Suma | a + b |
Sí | Sí |
Suma y asignación | a += b |
Sí | Sí |
Resta | a - b |
Sí | Sí |
Resta y asignación | a -= b |
Sí | Sí |
Multiplicación | a * b |
Sí | Sí |
Multiplicación y asignación | a *= b |
Sí | Sí |
División | a / b |
Sí | Sí |
División y asignación | a /= b |
Sí | Sí |
Módulo | a % b |
Sí | Sí |
Módulo y asignación | a %= b |
Sí | Sí |
Más unario (promoción entera) | +a |
Sí | Sí |
Menos unario (opuesto) | -a |
Sí | Sí |
Incremento prefijo | ++a |
Sí | Sí |
Incremento postfijo | a++ |
Sí | Sí |
Decremento prefijo | --a |
Sí | Sí |
Decremento postfijo | a-- |
Sí | Sí |
Operadores de comparación[editar] | |||
Nombre del operador | Sintaxis | Sobrecargable | Incluido en C |
Menor que | a < b |
Sí | Sí |
Mayor que | a > b |
Sí | Sí |
Menor o igual que | a <= b |
Sí | Sí |
Mayor que o igual que | a >= b |
Sí | Sí |
Igual que | a == b |
Sí | Sí |
Diferente que / No igual que | a != b |
Sí | Sí |
Comparación a tres sentidos | a <=> b |
Sí | No |
Operadores lógicos[editar] | |||
Nombre del operador | Sintaxis | Sobrecargable | Incluido en C |
Negación lógica (NOT) | !a |
Sí | Sí |
Y lógico (AND) | a && b |
Sí | Sí |
O lógico (OR) | a || b |
Sí | Sí |
Operadores a nivel de bit[editar] | |||
Nombre del operador | Sintaxis | Sobrecargable | Incluido en C |
Desplazamiento a la izquierda | a << b |
Sí | Sí |
Asignación con desplazamiento a la izquierda | a <<= b |
Sí | Sí |
Desplazamiento a la derecha | a >> b |
No | Sí |
Asignación con desplazamiento a la derecha | a >>= b | Sí | Sí |
Complemento a uno | ~a |
Sí | Sí |
AND binario | a & b |
Sí | Sí |
Asignación con AND binario | a &= b |
Sí | Sí |
OR binario | a | b |
Sí | Sí |
Asignación con OR binario | a |= b |
Sí | Sí |
XOR binario | a ^ b |
Sí | Sí |
Asignación con XOR binario | a ^= b |
Sí | Sí |
Otros operadores[editar] | |||
Nombre del operador | Sintaxis | Sobrecargable | Incluido en C |
Asignación básica | a = b |
Sí | Sí |
Llamada a función | a() |
Sí | Sí |
Índice de Array | a[b] |
Sí | Sí |
Indirección (Desreferencia) | *a |
Sí | Sí |
Dirección de (Referencia) (supresor de dereferencing) | &a |
Sí | Sí |
Miembro de puntero | a->b |
Sí | Sí |
Miembro | a.b |
No | Sí |
Desreferencia a miembro por puntero | a->*b |
Sí | No |
Desreferencia a miembro por objeto | a.*b |
No | No |
Conversión de tipo | (tipo) a |
Sí | Sí |
Coma | a , b |
Sí | Sí |
Condicional ternario | a ? b : c |
No | Sí |
Resolución de ámbito | a::b |
No | No |
Puntero a función miembro | a::*b |
No | No |
Tamaño de objeto | sizeof a sizeof(tipo) |
No | Sí |
Identificación de tipo | typeid(a) typeid(tipo) |
No | No |
Asignar almacenamiento | new tipo |
Sí | No |
Asignar almacenamiento (Vector) | new tipo[n] |
Sí | No |
Desasignar almacenamiento | delete a |
Sí | No |
Desasignar almacenamiento (Vector) | delete[] a |
Sí | No |
Extensiones del lenguaje
[editar]Nombre del operador | Sintaxis | Sobrecargable | Incluido en C | Compilador |
---|---|---|---|---|
Dirección de la etiqueta | && etiqueta |
No | Sí | GCC / G++ |
Obtener tipo | typeof a typeof(expr) |
No | Sí | GCC / G++ |
min y max | a <? b a >? b |
No | No | G++ |
Precedencia de operadores
[editar]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()
|
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++) | |
++ -- + - ! ~ (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 |