返回中的或运算符?

时间:2018-09-04 21:03:21

标签: c recursion return

我刚刚看到了类似的东西:

return (m(s1 + 1, s2) || m(s1 + 1, s2 + 1));

||return语句中是什么意思? m是一个函数; s1s2是字符串。

3 个答案:

答案 0 :(得分:9)

||语句中使用return运算符没有什么特别之处。这样的语句:

return <expression>;

等效于:

temp = <expression>;
return temp;

(其中temp的类型与函数的返回类型相同)。

所以您的陈述等同于:

int temp = (m(s1 + 1, s2) || m(s1 + 1, s2 + 1));
return temp;

答案 1 :(得分:5)

return (m(s1 + 1, s2) || m(s1 + 1, s2 + 1));行可以用以下格式重写:

if ( m(s1 + 1, s2) )
{ 
    /* if left part not null, return 1, without 
       evaluationg the right part */
    return 1;
}
else if ( m(s1 + 1, s2 + 1) )
{  
    /* if left was 0, test right part */
    return 1;
}
else
{ 
    /* if both are null, return 0*/
    return 0;
}

答案 2 :(得分:1)

||是短路或,表示表达式将在结果为第一个真值时停止执行。 它与该代码具有相同的效果,但是如果您知道||的含义,则它更短,更容易阅读:

if (m(s1 + 1, s2)) {
  return 1;
}
if(m(s1 + 1, s2 + 1)) {
  return 1;
}
return 0;

如果m在屏幕上打印了一些内容,则仅在第一个调用返回真值时才打印一次。您还可以使用&&进行类似的操作,但会以第一个false值停止。 return (m(s1 + 1, s2) && m(s1 + 1, s2 + 1));与:

if (!m(s1 + 1, s2)) {
  return 0;
}
if (!m(s1 + 1, s2 + 1)) {
  return 0;
}
return 1;

使用运算符的明显原因是您需要更少的样板。