Operadores em C e C++
C++ também contém os operadores para conversão de tipos de dados const_cast, static_cast, dynamic_cast e reinterpret_cast, que não estão listados na tabela.
Precedência de operadores
[editar | editar código]A seguir é listada a ordem de precedência e associatividade dos operadores. Elementos na mesma linha são calculados com a mesma precedência, de acordo com a direção dada.
A sintaxe das expressões é especificada por uma gramática livre de contexto, a tabela a seguir é inferida pela gramática.
| Operadores | Descrição | Associatividade |
|---|---|---|
:: |
Resolução de escopo | esquerda para direita |
++ --
|
Incremento e decremento pós-fixo Parênteses (chamada de função) Elemento de arranjo |
esquerda para direita |
++ --
|
Incremento e decremento prefixo Adição e subtração unária |
direita para esquerda |
.* ->* |
Ponteiro para membro | esquerda para direita |
* / %
|
Multiplicação, divisão, e módulo (resto) | |
+ -
|
Adição e subtração | |
<< >>
|
Deslocamento de bits à esquerda e à direita | |
< <=
|
“menor que” e “menor ou igual que” “maior que” e “maior ou igual que” | |
== !=
|
“Igual a” e “diferente de ” | |
&
|
E para bits | |
^
|
Ou exclusivo para bits | |
|
|
Ou para bits | |
&&
|
E lógico | |
||
|
Ou lógico | |
c?t:f
|
Condição ternária | direita para esquerda |
=
|
Atribuição Atribuição por adição ou subtração | |
throw |
Lançamento de exceção | --- |
, |
Vírgula | esquerda para direita |
Tabela
[editar | editar código]
Operadores aritméticos[editar | editar código] | |||
| Operador | Sintaxe | É sobrecarregável? | Presente em C? |
|---|---|---|---|
| Adição unária | +a | ||
| Adição | a + b | ||
| Incremento pré-fixado | ++a | ||
| Incremento pós-fixado | a++ | ||
| Atribuição por adição | a += b | ||
| Subtração unária | -a | ||
| Subtração | a - b | ||
| Decremento pré-fixado | --a | ||
| Decremento pós-fixado | a-- | ||
| Atribuição por subtração | a -= b | ||
| Multiplicação | a * b | ||
| Atribuição por multiplicação | a *= b | ||
| Divisão | a / b | ||
| Atribuição por divisão | a /= b | ||
| Módulo (resto) | a % b | ||
| Atribuição por módulo (resto) | a %= b | ||
Operadores comparativos[editar | editar código] | |||
| Operador | Sintaxe | É sobrecarregável? | Presente em C? |
| Menor que | a < b | ||
| Menor ou igual que | a <= b | ||
| Maior que | a > b | ||
| Maior ou igual que | a >= b | ||
| Diferente de | a != b | ||
| Igual a | a == b | ||
| Não lógico | !a | ||
| E lógico | a && b | ||
| Ou lógico | a || b | ||
| Deslocamento à esquerda | a << b | ||
| Atribução de deslocamento à esquerda | a <<= b | ||
| Deslocamento à direita | a >> b | ||
| Atribuição de deslocamento à direita | a >>= b | ||
Operadores lógicos sobre bits[editar | editar código] | |||
| Operador | Sintaxe | É sobrecarregável? | Presente em C? |
| Complemento | ~a | ||
| E | a & b | ||
| Atribuição por e | a &= b | ||
| Ou | a | b | ||
| Atribuição por ou | a |= b | ||
| Ou exclusivo | a ^ b | ||
| Atribuição por ou exclusivo | a ^= b | ||
Outros operadores[editar | editar código] | |||
| Operador | Sintaxe | É sobrecarregável? | Presente em C? |
| Atribuição | a = b | ||
| Chamada de função | a() | ||
| Elemento de arranjo | a[] | ||
| De referência | *a | ||
| Referência | &a | ||
| Membro de ponteiro | a->b | ||
| Membro de identificador | a.b | ||
| De referência de membro de identificador | a.*b | ||
| De-referência de membro de ponteiro | a->*b | ||
| Conversão de tipo de dados | (tipo) a | ||
| Vírgula | a , b | ||
| Condição ternária | a ? b : c | ||
| Resolução de escopo | a :: b | ||
| Tamanho de | sizeof a | ||
| Identificador de tipo | typeid (tipo de dado) | ||
Sinônimos em C++
[editar | editar código]C++ define palavras-chave que atuam como apelidos para alguns operadores: and (and), bitand (and), and_eq (and=), or (||), bitor (|), or_eq (|=), xor (^), xor_eq (^=), not (!), not_eq (!=), compl (~). Eles são processados pelo analisador sintático da mesma forma que seus equivalentes.
Já C fornece na biblioteca padrão o cabeçalho iso646.h, que define esses símbolos através de macros.