Operadores internos, precedência e associatividade no C++

A linguagem C++ inclui todos os operadores C e adiciona vários operadores novos. Os operadores especificam uma avaliação a ser executada em um ou mais operandos.

Precedência e capacidade de associação

A precedência do operador especifica a ordem das operações em expressões que contêm mais de um operador. A associatividade do operador especifica se, em uma expressão que contém vários operadores com a mesma precedência, um operando é agrupado com aquele à sua esquerda ou com aquele à sua direita.

Ortografias alternativas

O C++ especifica ortografias alternativas para alguns operadores. Em C, as ortografias alternativas são fornecidas como uma macro no cabeçalho <iso646.h>. Em C++, as ortografias alternativas são palavras-chaves e o uso de <iso646.h> ou do equivalente em C++ <ciso646> foi preterido. No Microsoft C++, a opção do compilador /permissive- ou /Za é necessária para habilitar ortografias alternativas.

Tabela de associatividade e precedência do operador C++

A tabela a seguir mostra a precedência e a associatividade dos operadores C++ (da precedência mais alta a mais baixa). Os operadores com o mesmo número de precedência têm igual precedência, a menos que outra relação seja explicitamente forçada por parênteses.

Descrição do operador Operador Alternativa
Precedência do grupo 1, sem associatividade
Resolução do escopo ::
Precedência do grupo 2, associatividade da esquerda para a direita
Seleção de membros (objeto ou ponteiro) . ou ->
Subscrito da matriz []
Chamada de função ()
Incremento pós-fixo ++
Decréscimo pós-fixo --
Nome do tipo typeid
Conversão de tipo constante const_cast
Conversão dinâmica de tipos dynamic_cast
Conversão de tipo reinterpretada reinterpret_cast
Conversão de tipo estático static_cast
Precedência do grupo 3, associatividade da direita para a esquerda
Tamanho do objeto ou tipo sizeof
Incremento de prefixo ++
Decremento de prefixo --
Complemento de um ~ compl
Expressão NOT lógica ! not
Negação unária -
Unário mais +
Endereço-de &
Indireção *
Criar objeto new
Destruir objeto delete
Converter ()
Precedência do grupo 4, associatividade da esquerda para a direita
Ponteiro para membro (objetos ou ponteiros) .* ou ->*
Precedência do grupo 5, associatividade da esquerda para a direita
Multiplicação *
Divisão /
Módulo %
Precedência do grupo 6, associatividade da esquerda para a direita
Adição +
Subtração -
Precedência do grupo 7, associatividade da esquerda para a direita
Deslocamento à esquerda <<
Deslocamento à direita >>
Precedência do grupo 8, associatividade da esquerda para a direita
Menor que <
Maior que >
Menor ou igual a <=
Maior ou igual a >=
Precedência do grupo 9, associatividade da esquerda para a direita
Igualdade ==
Desigualdade != not_eq
Precedência do grupo 10, associatividade da esquerda para a direita
AND bit a bit & bitand
Precedência do grupo 11, associatividade da esquerda para a direita
Bitwise exclusivo OU ^ xor
Precedência do grupo 12, associatividade da esquerda para a direita
Bitwise inclusive OU | bitor
Precedência do grupo 13, associatividade da esquerda para a direita
AND lógico && and
Precedência do grupo 14, associatividade da esquerda para a direita
OR lógico || or
Precedência do grupo 15, associatividade da direita para a esquerda
Condicional ? :
Cessão =
Atribuição de multiplicação *=
Atribuição de divisão /=
Atribuição de módulos %=
Atribuição de adição +=
Atribuição de subtração -=
Atribuição de deslocamento para a esquerda <<=
Atribuição de deslocamento para a direita >>=
Bitwise E atribuição &= and_eq
Atribuição OU inclusiva bit a bit |= or_eq
Atribuição OR exclusiva Bitwise ^= xor_eq
Expressão de lançamento throw
Precedência do grupo 16, associatividade da esquerda para a direita
Comma ,

Confira também

Sobrecarga de operador