c – 如何在用户定义的函数中实现短路评估?

一些操作符,如&&和||进行短路评估.此外,当使用参数调用函数时,在调用函数之前构造所有参数.

例如,采取以下三个功能

bool f1();
bool f2();
bool f3(bool, bool);

如果我打电话

if( f3(f2(),f1()) )//Do something

然后在调用f3之前评估f2和f1的返回值.但是,如果我使用(常规)运算符||而不是f3,而不是上面的代码相当于

if( f2()||f1() )//Do something

如果f2的计算结果为true,则不会计算f1.

我的问题是:是否有可能让f3(用户定义的函数采用两个布尔值)的行为方式相同?如果没有,是什么让操作符||非常特别?

最佳答案 如果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);
}
点赞