Operador de avaliação sequencial
O operador de avaliação sequencial, também chamado de "operador vírgula", avalia seus dois operandos em sequência da esquerda para a direita.
Sintaxe
expression
:
assignment-expression
expression
,
assignment-expression
O operando esquerdo do operador de avaliação sequencial (,
) é avaliado como uma expressão void
. O resultado da operação tem o mesmo valor e tipo que o operando direito. Cada operando pode ser de qualquer tipo. O operador de avaliação sequencial não executa conversões de tipo entre os operandos e não produz um valor l. Há um ponto de sequência após o primeiro operando, o que significa que todos os efeitos colaterais da avaliação do operando esquerdo são concluídos antes do início da avaliação do operando direito. Para obter mais informações, consulte Pontos de sequência.
Geralmente, o operador de avaliação sequencial é usado para avaliar duas ou mais expressões em contextos em que apenas uma expressão é permitida.
As vírgulas podem ser usadas como separadores em alguns contextos. No entanto, você precisa ter cuidado para não confundir o uso da vírgula como separador com o uso como operador. Os dois usos são distintos.
Exemplo
Este exemplo ilustra o operador de avaliação sequencial:
for ( i = j = 1; i + j < 20; i += i, j-- );
Neste exemplo, cada operando da terceira expressão da instrução for
é avaliado de maneira independente. O operando esquerdo, i += i
, é avaliado primeiro; em seguida, é a vez do operando direito, j--
.
func_one( x, y + 2, z );
func_two( (x--, y + 2), z );
Na chamada de função para func_one
, três argumentos, separados por vírgulas, são passados: x
, y + 2
e z
. Na chamada da função para func_two
, os parênteses forçam o compilador a interpretar a primeira vírgula como o operador de avaliação sequencial. Essa chamada de função passa dois argumentos para func_two
. O primeiro argumento é o resultado da operação de avaliação sequencial (x--, y + 2)
, que tem o valor e o tipo da expressão y + 2
; o segundo argumento é z
.