Solaris 动态跟踪指南

优先级

下表说明了运算符优先级和关联性的 D 规则。这些规则有点复杂,但为了保持与 ANSI-C 运算符优先级规则的完全兼容性,这是必需的。表中项的顺序为从最高优先级到最低优先级。

表 2–11 D 运算符优先级和关联性

运算符 

关联性 

() [] -> .

从左到右 

! ~ ++ -- + - * & (type) sizeof stringof offsetof xlate

从右到左 

* / %

从左到右 

+ -

从左到右 

<< >>

从左到右 

< <= > >=

从左到右 

== !=

从左到右 

&

从左到右 

^

从左到右 

|

从左到右 

&&

从左到右 

^^

从左到右 

||

从左到右 

?:

从右到左 

= += -= *= /= %= &= ^= |= <<= >>=

从右到左 

,

从左到右 

表中还有多个运算符我们尚未讨论;后续章节中将对它们进行讨论:

sizeof

计算对象的大小(第 7 章

offsetof

计算类型成员的偏移(第 7 章

stringof

将相应操作数转换为字符串(第 6 章

xlate

转换数据类型(第 40 章

一元 &

计算对象的地址(第 5 章

一元 *

取消引用指向对象的指针(第 5 章

->.

访问结构类型或联合类型的成员(第 7 章

表中列出的逗号 (,) 运算符用于与 ANSI-C 逗号运算符兼容,可以使用该运算符按照从左到右的顺序计算一组表达式的值,然后返回最右边表达式的值。提供此运算符是为了与 C 严格兼容,通常不应使用。

运算符优先级表中的 () 项表示函数调用;第 1 章 中提供了函数调用(如 printf()trace())的示例。D 中也使用逗号列出函数的参数以及用于构成关联数组键的列表。此逗号与逗号运算符不同,它一定从左向右计算。D 编译器不提供对函数参数或关联数组键的计算顺序的保证。在这些上下文中使用会产生负面影响的表达式(如表达式 ii++ 对)时务必小心。

运算符优先级表中的 [] 项表示数组或关联数组引用。第 1 章中提供了关联数组的示例。第 9 章中介绍了称为聚合的特殊类型的关联数组。[] 运算符同样可用于对大小固定的 C 数组建立索引,如第 5 章中所述。