我看到了看起来像这样的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的评估。

07-26 04:04