Bóson Treinamentos em Ciência e Tecnologia

Associatividade e Precedência de Operadores em C++

Associatividade e precedência dos operadores em C++

Associatividade e Precedência de Operadores em C++

A linguagem C++ avalia expressões aritméticas em uma sequência precisa, que é determinada pelas regras de precedência matemáticas e associatividade de operadores.

A tabela a seguir mostra os operadores em ordem decrescente de precedência:

Operadores Tipo Associatividade
( ) Parênteses De dentro para fora
*  /  % Multiplicativo Da esquerda para a direita
+  – Aditivo Da esquerda para a direita
<<   >> Inserção / Extração Da esquerda para a direita
<  <=  >  >= Relacional Da esquerda para a direita
==  != Igualdade Da esquerda para a direita
= Atribuição Da direita para a esquerda

Os parênteses ( ) podem ser usados para agrupar expressões e alterar a ordem de execução (precedência) dos operadores em uma expressão.

Desta forma, uma expressão como:

x = 5 * 2 + 3

a qual resulta em 13, é avaliada de forma diferente da expressão

x = 5 * (2 + 3)

que resulta no valor 25, pois neste segundo caso os parênteses alteram a ordem de execução dos operadores, efetuando a soma primeiro e depois a multiplicação com o resultado desta soma.

Associatividade em C++

A associatividade diz respeito à forma como a expressão é avaliada. Por exemplo, a expressão a + b + c é avaliada como se tivesse sido escrita (a + b) + c, pois os operadores aditivos (e aritméticos em geral) são associativos da esquerda para a direita – então, os operandos da esquerda são avaliados primeiro.

Já o operador de atribuição = é associativo da direita para a esquerda, de modo que a expressão a = b = 10 é avaliada como se tivesse sido escrita a = (b = 10), ou seja, como se fossem duas instruções separadas e sequenciais sendo executadas:

b = 10;
a = b;

Primeiramente o valor 10 é atribuído à variável b, e então o conteúdo da variável b é atribuído à variável a.

No exemplo a seguir combinamos regras de precedência com associatividade:

b = 10;
a = 3;
c = a * 3 + (b + 10) / 2

No exemplo, o ramos do lado direito será avaliado primeiro, e depois seu resultado atribuído à variável c (associatividade da atribuição). Porém, o ramo direito é em si uma expressão aritmética, e será avaliado da esquerda para a direita, respeitando a ordem de precedência dos operadores, exceto quando houver parênteses alterando-a.

Assim, teremos:

É isso aí! Nas próximas lições vamos explorar mais a fundo os diversos tipos de operadores disponíveis em linguagem C++.

Até!

Sair da versão mobile