可能的重复项:
为什么要使用三元运算符而不为"true"条件赋值 (x = x ?: 1)
在一本书中,我看到了三元运算符用法的模糊(对我来说)语法:
int nr = nr ? : 1; /* allowed shortcut, same as "nr ? nr : 1" */
这到底是什么意思?在代码中的某个地方声明了"nr"变量,它的初始值基于比较结果,"nr"(里面有一个垃圾,我猜O_o)不等于零......如果是这样,那么它会得到什么价值?
这是对 ternaray 运算符的扩展,允许省略第二个操作数,如注释中所述。
这:
int nr = nr ? : 1;
相当于:
int nr = nr ? nr : 1;
我相信这是一个特定于 GCC 的扩展,这里是它的 GCC 扩展页面。
正如其他人在评论中指出的那样,由于nr
正在声明并且声明中使用了它的值,因此这一行的结果是不可预测的。