C++ 有用于算术 (+,-,*,/) 以及按位运算 AND 和 OR 的“累加器”运算 - 但不用于逻辑运算。
现在,在我们的代码中,我们有时需要连接许多布尔值 - 就像我们需要对多个算术值求和一样。但是虽然我们可以写:
int sum { 0 };
sum += foo();
sum += (bar * baz);
sum += quux() ? 5 : 2;
我们似乎被降级为写作
int all_ok { true };
all_ok = all_ok and (foo() == GoodFoo);
all_ok = all_ok and (bar * baz > 3);
all_ok = all_ok and quux();
这很烦人。可以用什么成语来代替?
由于您为累加器变量使用了正确的布尔值(而不是
int
),因此您可以使用布尔值的加法和乘法语义 - 我相信您不会惊讶于学习对应于逻辑析取(分别为or
)和合取(and
)。
所以你可以写:
int all_ok { true };
all_ok *= (foo() == GoodFoo);
all_ok *= (bar * baz > 3);
all_ok *= quux();
看到它(嗯,类似的东西)在 GodBolt 上的行动。