运算符和等于的最佳习惯用法

问题描述 投票:0回答:1

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

这很烦人。可以用什么成语来代替?

c++ operators boolean-logic idioms
1个回答
0
投票

由于您为累加器变量使用了正确的布尔值(而不是

int
),因此您可以使用布尔值的加法和乘法语义 - 我相信您不会惊讶于学习对应于逻辑析取(分别为
or
)和合取(
and
)。

所以你可以写:

int all_ok { true };
all_ok *= (foo() == GoodFoo);
all_ok *= (bar * baz > 3);
all_ok *= quux();

看到它(嗯,类似的东西)在 GodBolt 上的行动

© www.soinside.com 2019 - 2024. All rights reserved.