例如,我想知道我是否有这个功能:
bool f(...) {
//something here
return true or f(...);
}
我知道它确实返回了true
,但它是在不评估语句的其他部分的情况下返回它还是再次评估函数?
否 它不会评估 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()
,那么只有这里才会有递归。
在这种情况下,它不会再次调用 f,因为它已经知道结果。查找“惰性评估”或“短路评估”
它在不评估函数的情况下返回 true。由于 or 语句中的第一次真正遇到保证 rest 是正确的,所以进一步评估是没有用的。