Solaris 动态跟踪指南

条件表达式

尽管 D 不支持 if-then-else 结构,但它支持使用 ?: 运算符的简单条件表达式。这些运算符可以关联三元表达式(其中,第一个表达式用于根据条件计算另两个表达式中的一个)。例如,以下 D 语句可用于根据 i 的值将变量 x 设置为两个字符串之一。

x = i == 0 ? "zero" : "non-zero";

在此示例中,将首先计算表达式 i == 0 以确定该表达式为 true 还是 false。如果第一个表达式为 true,则将计算第二个表达式,并且 ?: 表达式将返回其值。如果第一个表达式为 false,则将计算第三个表达式,并且 ?: 表达式将返回其值。

与任何 D 运算符一样,可以在单个表达式中使用多个 ?: 运算符来创建更复杂的表达式。例如,以下表达式将采用一个 char 变量 c,该变量包含 0-9、a-z 或 A-Z 范围中的一个字符,然后在将此字符解释为十六进制(以 16 为基数)整数格式的数字时返回此字符的值。

hexval = (c >= '0' && c <= '9') ? c - '0' :
    (c >= 'a' && c <= 'z') ? c + 10 - 'a' : c + 10 - 'A';

?: 配合使用的第一个表达式必须为指针或整数,以便计算表达式的实际值。第二个和第三个表达式可以为任何兼容类型。在一个路径返回字符串,另一个路径返回整数的情况下,不可以构造条件表达式。第二个和第三个表达式也不可以调用跟踪函数(如 trace()printf())。如果要根据条件跟踪数据,请改为使用第 1 章中讨论的谓词。