如何在用户定义的功能中实施短路评估?

Mal*_*rba 5 c++ short-circuiting

例如&&||进行短路评估。同样,当使用参数调用函数时,所有参数都在调用函数之前构造。

例如,采用以下三个功能

bool f1();
bool f2();
bool f3(bool, bool);
Run Code Online (Sandbox Code Playgroud)

如果我打电话

if( f3(f2(),f1()) )//Do something
Run Code Online (Sandbox Code Playgroud)

然后调用f2和的返回值f1之前被求值f3但是,如果我使用(常规)operator||代替f3,则上面的代码将等效于

if( f2()||f1() )//Do something
Run Code Online (Sandbox Code Playgroud)

f1如果f2评估结果为true ,则不会进行评估。

我的问题是:是否有可能f3(用户定义的函数使用两个布尔值)以相同的方式运行?如果不是,那么有什么operator||特别之处?

Mar*_*ork 2

如果 f3() 取函数结果的值则不然。

但是,如果它采用函数的地址(或者更一般地将其输入视为函子)而不是结果,那么 f3() 可以决定是否需要调用该函数。

template<typename F1, typename F2>
bool f3(F1 const& f1, F2 const& f2)
{
    return f1() || f2();
}

bool f1();
bool f2();

int main()
{
    f3(&f1, &f2);
}
Run Code Online (Sandbox Code Playgroud)