模糊的三元运算符使用

时间:2012-10-11 21:06:08

标签: c conditional-operator

  

可能重复:
  Why would you use the ternary operator without assigning a value for the “true” condition (x = x ?: 1)

在一本书中,我看到了三元运算符用法的模糊(对我而言):

int nr = nr ? : 1; /* allowed shortcut, same as "nr ? nr : 1" */

究竟是什么意思?在代码的某处,'nr'变量被声明,它的初始值是基于比较结果,'nr'(其中有一个垃圾,我猜O_o)不等于零...如果是这样的话会得到什么价值?

1 个答案:

答案 0 :(得分:2)

这是ternaray运算符的扩展,允许省略第二个操作数,如注释中所述。

此:

int nr = nr ? : 1;

相当于:

int nr = nr ? nr : 1;

我认为这是GCC特定的扩展,here's GCC扩展页面。

正如其他人在评论中指出的那样,由于nr被声明并且它的值在声明中使用,因此该行的结果是不可预测的。