1

例如,我想知道我是否有这个功能:

bool f(...) {
  //something here
  return true or f(...);
}

我知道它确实返回了true,但它是在不评估语句的其他部分的情况下返回它还是再次评估函数?

4

4 回答 4

4

这不会评估函数,因为我们已经知道操作数之一是 or'd 为真。同样的事情发生在:

bool f(...) {
    return false and f(...)
}

这称为短路评估。

于 2012-11-01T05:57:22.340 回答
3

否 它不会评估 func() 调用。

LOGICAL OR 计算“从左到右”并在表达式返回 true 时停止

你可以检查一下。你测试了吗?

用下面的程序测试它:

#include <iostream>
using namespace std;
bool func();
bool func2();
int main()
{
func();
}

bool func2()
{
cout <<"called me"<<endl;
return true;
}
bool func()
{
return (true ||func2());
}

它只会执行不会向控制台打印任何内容。

如果你指的是return语句上面同一个函数中的其他部分代码,是的,即使底部的return语句为true,它也会被执行。如果你的意思是递归部分,那么它不会被执行,因为在该语句中的调用之前有 true。如果是return false||func(),那么只有这里才会有递归。

于 2012-11-01T05:58:03.943 回答
1

在这种情况下,它不会再次调用 f,因为它已经知道结果。查找“惰性评估”或“短路评估”

于 2012-11-01T05:53:10.420 回答
1

它在不评估函数的情况下返回 true。由于 or 语句中的第一次真正遇到保证 rest 是正确的,所以进一步评估是没有用的。

于 2012-11-01T05:53:46.863 回答