ISO/IEC 9899:2011 条约6.5.15——条件操作符
6.5.15 条件操作符
语法
1、conditional-expression:
logical-OR-expression
logical-OR-expression ? expression : conditional-expression
约束
2、第一个操作符应该具有标量类型。
3、对于第二和第三个操作数应该遵守下列规则之一:
——两个操作数都应该具有算术类型;
——两个操作数都具有相同的结构体和联合体类型
——两个操作数都具有void类型;
——两个操作数都是兼容类型的指向限定的与非限定版本的指针;
——其中一个操作数是一个指针,而另一个是一个空指针常量;或者
——一个操作数是一个指向对象类型的指针,而另一个是一个指向一个限定或非限定版本的void的指针。
语义
4、第一个操作数被计算;在其计算与第二个或第三个操作数之间有一个顺序点。只有当第一个比较结果不为0时,才计算第二个操作数;只有当第一个操作数比较等于0时,才计算第三个操作数;结果为第二或第三个操作数的值,被转换为下述描述的类型。[注:一个条件表达式不产生一个左值。]
5、如果第二和第三个操作数都具有算术类型,那么结果类型将由通常的算术转换确定,它们被应用到这两个操作数上,作为其结果类型。如果两个操作数都具有结构体与联合体类型,那么结果就具有该类型。如果两个操作数都具有void类型,那么结果具有void类型。
6、如果第二个和第三个操作数都是指针,或者一个是一个空指针常量,而另一个是指针,那么结果类型是一个指向一个限定类型的指针,带有两个操作数都被引用的类型的类型限定符。此外,如果两个操作数都是指向兼容类型的指针或指向兼容类型不同限定版本的指针,那么结果类型是一个指向该复合类型的一个适当限定版本的指针;如果一个操作数是一个空指针常量,那么结果具有另一个操作数的类型;否则,一个操作数是一个指向void的指针,或者一个限定版本的void的指针,在这种情况下,结果类型是一个void适当限定版本的指针。
7、