Expressões pós-fixadas
As expressões pós-fixadas consistem em expressões primárias ou expressões nas quais operadores pós-fixados seguem uma expressão primária. Os operadores pós-fixados estão listados na tabela a seguir.
Operadores pós-fixados
Nome do operador |
Notação do operador |
---|---|
[ ] |
|
( ) |
|
type-name( ) |
|
. ou –> |
|
++ |
|
–– |
A sintaxe a seguir descreve expressões pós-fixadas possíveis:
primary-expression
postfix-expression [ expression ]
postfix-expression ( expression-list<SUB>opt</SUB> )
simple-type-name ( expression-list<SUB>opt</SUB> )
postfix-expression . name
postfix-expression –> name
postfix-expression ++
postfix-expression ––
cast-keyword < typename > (expression )
typeid ( typename )
No código acima, postfix-expression pode ser uma expressão primária ou outra expressão pós-fixada. Consulte o tópico sobre expressões primárias. As expressões pós-fixadas são agrupadas da esquerda para a direita; com isso, elas podem ser encadeadas da seguinte forma:
func(1)->GetValue()++
Na expressão acima, func é uma expressão primária, func(1) é uma expressão pós-fixada de função, func(1)->GetData é uma expressão pós-fixada que especifica um membro da classe, func(1)->GetData() é outra expressão pós-fixada de função, e a expressão inteira é uma expressão pós-fixada que incrementa o valor de retorno de GetData. O significado da expressão, no conjunto, é "função de chamada passando 1 como um argumento e obtendo um ponteiro para uma classe como um valor de retorno". Em seguida, GetValue() é chamada nessa classe, e o valor retornado é incrementado.
As expressões listadas acima são expressões de atribuição, ou seja, o resultado dessas expressões deve ser um r-value.
O formato de expressão pós-fixada
simple-type-name ( expression-list )
indica a invocação do construtor. Caso simple-type-name seja um tipo fundamental, a lista de expressões deve ser formada por uma única expressão, a qual indica uma conversão do valor da expressão no tipo fundamental. Esse tipo de expressão convertida imita um construtor. Como esse formato permite que classes e tipos fundamentais sejam construídos usando a mesma sintaxe, ele é especialmente útil na definição de classes de modelo.
cast-keyword é uma destas opções: dynamic_cast, static_cast ou reinterpret_cast. Mais informações podem ser encontradas em dynamic_cast, static_cast e reinterpet_cast.
O operador typeid é considerado uma expressão pós-fixada. Consulte o tópico sobre o operador typeid.