我想知道,例如,我是否有这个功能:
bool f(...) {
//something here
return true or f(...);
}
我知道它确实返回true
但它是否在不评估语句的其他部分的情况下返回它,或者它是否再次评估该函数?
答案 0 :(得分:4)
这不会评估函数,因为我们已经知道其中一个操作数是真的。同样的事情发生在:
bool f(...) {
return false and f(...)
}
答案 1 :(得分: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 false||func()
,那么这里只会有递归。
答案 2 :(得分:1)
在这种情况下,它不会再次调用f,因为它已经知道结果。查找“懒惰评估”或“短路评估”
答案 3 :(得分:1)
在不评估函数的情况下返回true。由于第一次真实遭遇或陈述保证休息是真的,因此进一步评估是无用的。