我看到了看起来像这样的C行:
rFrameL = block_a.available ?
img->mb_data[block_a.mb_addr].mb_field ?
refPic[list][block_a.pos_y][block_a.pos_x]:
refPic[list][block_a.pos_y][block_a.pos_x] * 2:
-1;
似乎嵌套了if和else表达式,但我不知道它是如何工作的。 (exp1)为true时返回(exp3)吗?
返回(exp2)时返回(exp4)吗?
当(exp1)和(exp2)为假时返回(exp5)吗?
最佳答案
用括号括起来的隐式操作顺序:
rFrameL = block_a.available ?
(img->mb_data[block_a.mb_addr].mb_field ?
refPic[list][block_a.pos_y][block_a.pos_x]:
refPic[list][block_a.pos_y][block_a.pos_x] * 2):
-1;
给定
a?b:c
,这意味着“将评估结果设为true,如果是,则评估结果b,否则评估c”。在上面的表达式中,当遇到b
时将对?
进行求值,因此它将启动新的三元运算。遇到的第一个:
与第二个?
匹配,然后第二个:
结束对b
的评估。