C++ 如何检查多个变量是否等于同一个值?
如何比较多个项目?例如,我想检查是否所有变量A、B和C都等于字符“X”,或者所有三个都等于“O”。(如果其中两个为X,一个为O,则应返回false。) 我试过: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
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:这不是真的,&
和
的优先级不相等<代码>&&
的优先级高于|
。非常感谢!你刚才给了我一个想法,让我做一个函数来实现这一点!