tl;dr:C++ 中是否存在非短路逻辑与(类似于 &&)?
我有 2 个要调用的函数,并使用返回值来计算第三个复合函数的返回值。问题是我总是希望这两个函数都进行评估(因为它们输出有关系统状态的日志信息)
IE:
bool Func1(int x, int y){
if( x > y){
cout << "ERROR- X > Y" << endl;
}
}
bool Func2(int z, int q){
if( q * 3 < z){
cout << "ERROR- Q < Z/3" << endl;
}
}
bool Func3(int x, int y, int z, int q){
return ( Func1(x, y) && Func2(z, q) );
}
当然,函数中的条件并不是那么简单,是的,我意识到我可以使用临时变量来存储两个函数的返回,然后对临时变量执行“短路”逻辑,但是我想知道是否有一种“优雅”的语言解决方案可以在 Func3 中保持单行返回,同时仍然从两个函数中获取日志消息。
回复摘要:
“按位”运算符 | 和 & 可用于获得效果,但前提是返回类型为 bool。我在 ANSI C++ 规范中没有提到这一点。据我所知,这是有效的,因为“bool”被转换为int(true = 1,false = 0),然后使用按位运算符,然后将其转换回bool。
也可以使用运算符 " +
" 和 " "。*
这在 ANSI C++ 规范中没有提到,但可能由于与上述相同的原因而起作用。" +
" 给出 "or" 因为 true 被转换为 1,然后除了 0 之外的任何东西都被转换回 true。" *
" 适用于 "and" 因为 1 (true) * 0 (false) == 0(false) 和 1(true) * 1(true) == 1(true)
这两者似乎都依赖于隐式类型转换为整数然后返回布尔。这两者都可能会搞砸任何试图维护代码的人。
其他回答归结为“只使用临时人员”或“实施你自己的”,这不是问题。目标是查看是否已经在 C++ 标准中实现了一个运算符来执行此操作。