【发布时间】:2012-10-02 15:30:34
【问题描述】:
在一个人的书中,我看到了三元运算符用法的模糊(对我而言)语法:
int nr = nr ? : 1; /* allowed shortcut, same as "nr ? nr : 1" */
这到底是什么意思?在代码中的某处声明了“nr”变量,它的初始值基于比较结果是否“nr”(其中有一个垃圾,我猜是 O_o)不等于零......如果是,那么它会得到什么价值?
【问题讨论】:
-
该行也声明了 nr,因此它在初始化之前就已被使用,这意味着该行可能导致任一分支被采用而无法预测。对我来说,这似乎不是特别有用的代码行。
-
不是骗子"这个是声明一个变量并用它自己初始化它!那个不是...
-
@JohannesSchaub-litb:我认为问题的关键在于如果
nr评估为true会发生什么,即分配什么值。扩展的规范回答了这个问题。 -
@EdS 这是非常值得怀疑的,因为 that 答案已经在这个问题中给出,作为示例代码中的 c 注释..
-
@EdS 如果
int具有陷阱表示,则该位置中的位可能确实构成一个,“不确定值”在 3.19.2 中定义为“未指定的值或陷阱表示”( n1570)。无论如何,它是附件 J.2“未定义行为”的 UB:“具有自动存储持续时间的对象的值在不确定时使用(6.2.4、6.7.9、6.8)”。 (是的,附件 J 仅提供信息,但在这里非常明确。)