在 C++ 中用一个 if 满足两个条件

Satisfy two conditions with a single if in C++

在C++中有没有办法同时满足两个条件?

我有一个列表

 x and y
-1    -1
-1     0
-1     1
 0    -1
 0     0
 0     1
 1    -1
 1     0
 1     1

所以我想在等式中使用它们的所有组合,例如:

a = x+y (example)

但是我想排除x和y同时=0的情况

所以我尝试了:

if(x!=0 && y!=0){
a = x+y;
}

但这排除了 x 或 y 等于 0 的所有情况,而不仅仅是我想要的 x,y = (0,0) 点。

我该如何解决?

你需要

if (!(x == 0 && y == 0)) {
    ...
}

您可以使用De Morgan's laws将其翻译成

if (x != 0 || y != 0) {
    ...
}

您可以将 exnot 条件与 and 条件一起使用

if (!(x == 0 && y == 0)) { //code
}
namespace utility{
  bool all_of( std::initializer_list<bool> bs ){
    return std::all_of(bs.begin(), bs.end(), [](bool b){return b;});
  }
  bool any_of( std::initializer_list<bool> bs ){
    return std::any_of(bs.begin(), bs.end(), [](bool b){return b;});
  }
}

然后

if(!utility::all_of({x==0, y==0})){
  a = x+y;
}

if(!(x==0 && y==0)){
  a = x+y;
}

如果你更理智。

您应该使用逻辑 OR 运算符而不是 AND 运算符以获得预期结果:

if(x!=0 || y!=0){
   a = x+y;
}

如果只有两个操作数都是 0 而不是 true:

,则此条件的布尔值 table 将为 false
0  0  false
1  0  true 
0  1  true
1  1  true