# Operadors en C i C++

Aquesta és una llista d'operadors en els llenguatges de programació C i C++. Tots els operadors (excepte typeof) llistats existeixen en C++. Cal tenir en compte que C no admet la sobrecàrrega de l'operador.
Quan no està sobrecarregat, per als operadors &&, ||, i , (l'operador de coma), hi ha un punt de seqüència després de l'avaluació del primer operand.
C++ també conté els operadors de conversió de tipus const_cast, static_cast, dynamic_cast i reinterpret_cast. El format d'aquests operadors significa que el seu nivell de precedència no és important.
La majoria dels operadors disponibles en C i C++ també estan disponibles en altres llenguatges de la família C com ara C#, D, Java, Perl i PHP amb la mateixa precedència, associativitat i semàntica.

## Taula

Als efectes d'aquestes taules, a, b i c representen valors vàlids (literals, valors de variables o valor de retorn), noms d'objectes o valors l, segons correspongui. R, S i T representen qualsevol tipus, i K un tipus de classe o tipus enumerat.

### Operadors aritmètics

Tots els operadors aritmètics existeixen en C i C++ i es poden sobrecarregar en C++.
| Operador | Sintaxi |
| Addició | a + b |
| Substracció | a - b |
| Increment unitari | +a |
| Decrement unitari | -a |
| Multiplicació | a * b |
| Divisió | A / b |
| Mòdul | a % b |
| Increment | a++ |
| Decrement | a-- |

### Operadors de comparació/operadors relacionals

Tots els operadors de comparació es poden sobrecarregar en C++. Des de C++20, l'operador de desigualtat es genera automàticament si es defineix operator== i els quatre operadors relacionals es generen automàticament si es defineix operator<=>.
| Operador | Sintaxi |
| Igual a | a == b |
| No igual a | a != b |
| Més gran que | a > b |
| Més petit que | a < b |
| Més gran o igual que | a >= b |
| Més petit o igual que | a <= b |
| Triple comparació | a <=>b |

### Operadors lògics

Tots els operadors lògics existeixen en C i C++ i es poden sobrecarregar en C++, tot i que es desaconsella la sobrecàrrega de l'I lògic i l'OR lògic, perquè com a operadors sobrecarregats es comporten com a crides de funcions ordinàries, la qual cosa significa que els seus dos operands s'avaluen, de manera que perden la seva propietat d'avaluació de curtcircuits ben utilitzada i esperada.
| Nom de l'operador | Nom de l'operador | Sintaxi | Exemples de prototips en C++ | Exemples de prototips en C++ |
| Nom de l'operador | Nom de l'operador | Sintaxi | Com a membre de K | Definicions fora de classe |
| Negació lògica (NO) | Negació lògica (NO) | ! a not a | bool K :: operator !; | bool operator ! (K a ); |
| I lògic | I lògic | a && b a and b | bool K :: operator && (S b ); | bool operator && (K a , S b ); |
| OR lògic | OR lògic | a || b a ??!??! b a or b | bool K::operator ||(S b); | bool operator ||(K a, S b); |

### Operadors per bits

Tots els operadors de bits existeixen en C i C++ i es poden sobrecarregar en C++.
| Nom de l'operador | Nom de l'operador | Sintaxi | Exemples de prototips | Exemples de prototips |
| Nom de l'operador | Nom de l'operador | Sintaxi | Com a membre de K | Definicions fora de classe |
| Bit a bit NO | Bit a bit NO | ~ a ?? - a compl a | R K :: operator ~; | R operator ~ (K a ); |
| I per bits | I per bits | a & b a bitand b | R K :: operator & (S b ); | R operator & (K a , S b ); |
| O per bits | O per bits | a | b a ??! b a bitor b | R K :: operator | (S b ); | R operator | (K a , S b ); |
| XOR bit a bit | XOR bit a bit | a ^ b a ?? ' b a xor b | R K :: operator ^ (S b ); | R operator ^ (K a , S b ); |

### Operadors d'assignació

Totes les expressions d'assignació existeixen en C i C++ i es poden sobrecarregar en C++.
Per als operadors donats, la semàntica de l'expressió d'assignació combinada incorporada a ⊚= b és equivalent a a = a ⊚ b, excepte que a només s'avalua una vegada.
| Operador | Sintaxi |
| Assignació directa | a = b |
| Assignació suma | a += b |
| Assignació resta | a -= b |
| Assignació multiplicació | a *= b |
| Assignació divisió | a /= b |

## Precedència de l'operador

A continuació es mostra una taula que enumera la precedència i l'associativitat de tots els operadors en els llenguatges C i C++. Els operadors es mostren de dalt a baix, amb precedència descendent. La precedència descendent fa referència a la prioritat de l'agrupació d'operadors i operands. Tenint en compte una expressió, un operador que apareix en alguna fila s'agruparà abans de qualsevol operador que aparegui en una fila més avall. Els operadors que es troben a la mateixa cel·la (pot haver-hi diverses files d'operadors llistats en una cel·la) s'agrupen amb la mateixa precedència, en la direcció donada. La prioritat d'un operador no es veu afectada per la sobrecàrrega.
La sintaxi de les expressions en C i C++ s'especifica mitjançant una gramàtica d'estructura de frase. La taula que es dona aquí s'ha deduït de la gramàtica. Per a l'estàndard ISO C 1999, la secció 6.5.6 nota 71 estableix que la gramàtica C proporcionada per l'especificació defineix la precedència dels operadors C i també estableix que la precedència de l'operador resultant de la gramàtica segueix de prop la secció de l'especificació. encàrrec:
"La sintaxi [C] [és a dir, gramàtica] especifica la precedència dels operadors en l'avaluació d'una expressió, que és el mateix que l'ordre de les subclàusules principals d'aquesta subclàusula, la precedència més alta primer."

## Referències

* ↑ «C++ Operator Precedence - cppreference.com» (en anglès). [Consulta: 21 desembre 2023].
* ↑ «Operator overloading§Comparison operators» (en anglès). cppreference.com.
* ↑ «Standard C++» (en anglès).
* ↑ ISO/IEC 9899:201x Programming Languages - C (en anglès). open-std.org – The C Standards Committee, 19 December 2011, p. 465.