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); } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |