C++ 如何检查多个变量是否等于同一个值?

C++ 如何检查多个变量是否等于同一个值?,c++,C++,如何比较多个项目?例如,我想检查是否所有变量A、B和C都等于字符“X”,或者所有三个都等于“O”。(如果其中两个为X,一个为O,则应返回false。) 我试过: if (A, B, C == 'X' || A, B, C == 'O') { //Do whatever } 但它不起作用。最好的方法是什么?只需将它们分开并逐个测试: if((A == 'X' || A == 'O') && A == B && B == C) { // D

如何比较多个项目?例如,我想检查是否所有变量A、B和C都等于字符“X”,或者所有三个都等于“O”。(如果其中两个为X,一个为O,则应返回false。)

我试过:

if (A, B, C == 'X' || A, B, C == 'O') 
  {
    //Do whatever
  }

但它不起作用。最好的方法是什么?

只需将它们分开并逐个测试:

if((A == 'X' || A == 'O') && A == B && B == C)
{
    // Do whatever
}
if (A == 'O' && B == 'O' && C == 'O' || A == 'X' && B == 'X' && C == 'X')
    // etc
只是为了多样性:

template <typename T, typename U>
bool allequal(const T &t, const U &u) {
    return t == u;
}

template <typename T, typename U, typename... Others>
bool allequal(const T &t, const U &u, Others const &... args) {
    return (t == u) && allequal(u, args...);
}

if (allequal(a,b,c,'X') || allequal(a,b,c,'O')) { ... }
模板
布尔·阿勒夸尔(康斯特T&T、康斯特U&U){
返回t==u;
}
模板
布尔·阿勒夸尔(常量T&T、常量U&U、其他常量和…参数){
返回(t==u)和&allequal(u,args…);
}
if(allequal(a,b,c,'X')| allequal(a,b,c,'O')){…}

为什么要把一件简单的事情复杂化?@Kos:为什么my是复杂的,为什么它是一件简单的事情?我同意@Kos的观点-这应该作为扩展形式编写,以便其他程序员更容易理解您正在做的事情。无论如何,编译器比我们能更好地优化这些布尔条件。不,对不起。我需要一个表达式,如果A,B和C都等于O或X,它将返回true。如果一个是O,另一个是X,它将返回false。我会改变我的帖子,让它更清晰。@Kos我发现这段代码比OP想要写的要清晰得多。这里没有“把戏”;只是基本逻辑。顺便说一句,使用数组而不是A、B、C变量不是更好吗?我只是问我在用一个变量。我所说的A,B,C是指:myArray[0],myArray[1],myArray[2]。似乎除了下面的答案或只是逐一测试之外,没有其他方法可以做到这一点。谢谢。你需要在那里添加
()
,否则它基本上会一个接一个地进行,而不是你打算分别测试两组并
对它们进行测试。@Dani我相信你,但你能解释一下原因吗?按降序排列的运算符是
==
然后
&&
然后
|
,对吗?这难道不意味着所有的
==
都是先完成的,然后是
&&
,然后是
|
?这不是正确的吗?不,
&&
|
具有相同的优先级,因此首先所有的
=
都会发生,然后2个
&
然后
|
然后是最后一个
&
@Dani:这不是真的,
&
的优先级不相等<代码>&&
的优先级高于
|
。非常感谢!你刚才给了我一个想法,让我做一个函数来实现这一点!