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
editarA 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
Operadores aritméticoseditar | |||
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 comparativoseditar | |||
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 bitseditar | |||
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 operadoreseditar | |||
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++
editarC++ 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.