C:什么是(exp1)? (exp2)? (exp3) : (exp4) : (exp5) 运算符呢?
C: What does (exp1)? (exp2)? (exp3) : (exp4) : (exp5) operator do?
我看到 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) 为真时返回 (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
,这意味着 "does a evaluate to true, if yes then evaluate b, otherwise evaluate c"。在上面的表达式中,当遇到 ?
时,正在计算 b
,因此它会启动一个新的三元运算。遇到的第一个 :
与第二个 ?
匹配,然后第二个 :
结束对 b
的评估。
这是三元运算符格式的嵌套 if-else 语句。
这 '?'指的是 'if' 是用 ':'
中的答案解决的
简单来说,下面的代码类似于三元运算符格式:
if (exp1)
{
if(exp2)
{
if(exp3)
{
exp4;
}
exp5;
}
exp6;
}
我看到 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) 为真时返回 (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
,这意味着 "does a evaluate to true, if yes then evaluate b, otherwise evaluate c"。在上面的表达式中,当遇到 ?
时,正在计算 b
,因此它会启动一个新的三元运算。遇到的第一个 :
与第二个 ?
匹配,然后第二个 :
结束对 b
的评估。
这是三元运算符格式的嵌套 if-else 语句。 这 '?'指的是 'if' 是用 ':'
中的答案解决的简单来说,下面的代码类似于三元运算符格式:
if (exp1)
{
if(exp2)
{
if(exp3)
{
exp4;
}
exp5;
}
exp6;
}