[英]C++ logical & operator
C ++中是否有逻辑&运算符? 例如,一个与&&一样工作的运算符,除了它还评估后面的参数,即使前面的参数已经评估为false? 运算符&是我理解的按位和运算符。
运算符&确实是按位运算符。 我假设你有类似的东西
if ( f() && g() ) { /*do something*/ }
并且你想要执行f()和g(),无论其中一个是否被评估为false。 我建议你做点其他事情:
bool bF = f();
bool bG = g();
if ( bF && bG ) { /*do something*/ }
这也提供了更好的可读性,并且不会混淆尝试维护代码的其他程序员。 从长远来看,这是值得的。
在C ++中没有这样的“always execute”操作符。
我的第一个倾向是,您应该重新评估您的方法所做的工作,以消除任何强制执行它们的副作用,而不是寻找新的操作符。 以这种方式可以简单地使用&&
并且快乐。
但是如果你真的想按顺序完成所有操作,然后看看它们是否都成功了,那么Luchian Grigore的回答可能是最好的。 它清楚地描述了它始终需要执行的顺序步骤。 还有一个选项可能会或可能不会更清楚:
// Each method needs to execute in sequence but we use "success" to track overall success. The order of operands to `operator&&` shouldn't be changed.
bool success = f1();
success = f2() && success;
success = f3() && success;
if(success) ...
没有逻辑&
,只有一个按位&
。
如果你想避免逻辑语句的短路,你需要使用一个代理,不会被编译器优化掉来实现它(比如一个可变元元模板)。
如果操作员&&过载,它不会短路。
struct Bool {
bool val;
Bool(bool f): val(f) {}
operator bool() {
return val;
}
};
bool operator&&(Bool a, Bool b) {
return (bool)a && (bool)b;
}
ref:第19点, C ++ FAQ lite中的第13.9节
虽然如上所述,这是一个非常糟糕的主意 ,让人困惑。 如果您有一个非常特殊的情况,您可能希望以非常有限的方式进行。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.