加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-16 07:29:12 所属栏目:百科 来源:网络整理
导读:一些操作符,如和||进行短路评估.此外,当使用参数调用函数时,在调用函数之前构造所有参数. 例如,采取以下三个功能 bool f1();bool f2();bool f3(bool,bool); 如果我打电话 if( f3(f2(),f1()) )//Do something 然后在调用f3之前评估f2和f1的返回值.但是,如果我
一些操作符,如&&和||进行短路评估.此外,当使用参数调用函数时,在调用函数之前构造所有参数.

例如,采取以下三个功能

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);
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读