6.5.16 条件运算符
- 条件运算符的形式是:
c
E1 ? E2 : E31
第一个操作数必须具有标量类型。
首先求值
E1;若它与0比较不相等,则只求值E2,否则只求值E3。在第一个操作数求值与第二、第三操作数中被选中的那个操作数求值之间,存在一个序列点。
第二与第三操作数不会同时求值,只会求值其中被选中的一个。
条件运算符结果的类型,取决于第二和第三操作数的类型组合;标准会按算术转换、指针兼容性、
void、结构体/联合体等规则确定公共结果类型。若第二和第三操作数都具有算术类型,则对它们执行通常算术转换来确定结果类型。
若涉及指针,则会按空指针、
nullptr_t、void *与兼容指针类型规则推导结果类型。
IMPORTANT
条件运算符不是简单的“if 表达式版”。它不仅控制求值分支,还会自己做一轮结果类型合成。