Постфиксные выражения
Постфиксные выражения состоят из основных выражений или выражений, в которых постфиксные операторы следуют за основным выражением. Постфиксные операторы перечислены в следующей таблице.
Постфиксные операторы
Имя оператора |
Нотация оператора |
---|---|
[ ] |
|
( ) |
|
имя-типа( ) |
|
. или –> |
|
++ |
|
–– |
Следующий синтаксис описывает возможные постфиксные выражения:
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 )
постфиксное-выражение выше может быть основным выражением или другим постфиксным выражением. См. основные выражения. Постфиксные выражения группируются слева направо, делая возможным следующее связывание выражений.
func(1)->GetValue()++
В предыдущем выражении func — это основное выражение, func(1) — постфиксное выражение функции, func(1)->GetData — постфиксное выражение, задающее член класса, func (1)->GetData() — это другое постфиксное выражение функции, и все выражение представляет собой постфиксное выражение, инкрементно увеличивающее возвращаемое значение GetData. Значение выражения в целом имеет следующий смысл: "вызовите функцию, передающую 1 в качестве аргумента, и получите указатель на класс в качестве возвращаемого значения. Затем вызовите GetValue() для этого класса и выполните инкрементное увеличение возвращаемого значения.
Перечисленные выше выражения — это выражения присваивания, что означает, что результат этих выражений должен представлять собой r-значение.
Форма постфиксного выражения
simple-type-name ( expression-list )
показывает вызов конструктора. Если simple-type-name — это фундаментальный тип, список выражений должен представлять собой отдельное выражение, и это выражение обозначает приведение значения выражения к фундаментальному типу. Данный тип выражения приведения копирует конструктор. Поскольку эта форма позволяет создавать фундаментальные типы и классы с использованием одного и того же синтаксиса, эта форма особенно полезна при определении шаблонных классов.
Ключевое-слово-приведения — это одно из ключевых слов dynamic_cast, static_cast или reinterpret_cast. Дополнительные сведения можно найти в разделах dynamic_cast, static_cast и reinterpet_cast.
Оператор typeid считается постфиксным выражением. См. раздел Оператор typeid.