后缀表达式
后缀表达式包含主表达式或者其中的后缀运算符跟在主表达式之后的表达式。 下表列出了后缀运算符。
后缀运算符
运算符名称 |
运算符表示法 |
---|---|
[ ] |
|
( ) |
|
type-name( ) |
|
. 或 –> |
|
++ |
|
–– |
以下语法描述了可能的后缀表达式:
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 )
上面的 postfix-expression 可能是主表达式或另一个后缀表达式。请参阅主表达式。后缀表达式从左到右进行分组,这允许表达式按如下方式链接起来:
func(1)->GetValue()++
在上面的表达式中,func 是主表达式,func(1) 是函数后缀表达式,func(1)->GetData 是指定类成员的后缀表达式,func(1)->GetData() 是另一个函数后缀表达式,整个表达式是增加 GetData 的返回值的后缀表达式。该表达式的整体含义是作为参数传递 1 的 "call func,并作为返回值获取一个指向类的指针。然后调用此类上的 GetValue(),接着递增返回的值。
上面列出的表达式是赋值表达式,这意味着这些表达式的结果必须为右值。
后缀表达式形式
simple-type-name ( expression-list )
指示构造函数的调用。如果 simple-type-name 是基本类型,则表达式列表必须是单个表达式,并且该表达式指示表达式的值将转换为基础类型。此类强制转换表达式模仿构造函数。由于此形式允许使用相同的语法来构造基本类型和类,因此它在定义模板类时特别有用。
cast-keyword 是 dynamic_cast、static_cast 或 reinterpret_cast 之一。可在 dynamic_cast、static_cast 和 reinterpet_cast 中找到更多信息。
typeid 运算符被视为后缀表达式。请参阅 typeid 运算符。