如何修复“==”操作数中比较周围的建议括号

How to fix suggest parentheses around comparison in operand of '=='

我有这样的代码

if (config_atual[6]==config_atual[7]==config_atual[8] || 
    config_atual[1]==config_atual[4]==config_atual[7] || 
    config_atual[2]==config_atual[4]==config_atual[6])
{
   if (config_atual[7]=='X')
       cout << "O Jogador ganhou!" << endl;
   else if (config_atual[7]=='O')
       cout << "O Computador ganhou!" << endl;
}

关于井字游戏,每当我尝试编译这行代码时,它会验证三个获胜条件(假设第一行的索引为 0、1、2,第一行的索引为 3、4、5第二个和最后一个 6、7、8)我收到此警告:

suggest parentheses around comparison in operand of '==' [-Wparentheses]

我不明白。我做错了什么,config_atual 是一个包含游戏板当前配置的字符数组。

此警告是什么意思,我该如何更正它?

C++ 中的

== 运算符不是那样工作的。它只允许两个操作数,这意味着像 a == b == c 这样的结构不会像你期望的那样工作。以 (a == b && b == c) 形式重写条件(注意括号)。

你可以这样做

if ((config_atual[6]==config_atual[7] && config_atual[7]==config_atual[8]) ||
    (config_atual[1]==config_atual[4] && config_atual[4]==config_atual[7]) ||
    (config_atual[2]==config_atual[4] && config_atual[4]==config_atual[6]))

表达式 config_atual[6]==config_atual[7]==config_atual[8] 分组(config_atual[6]==config_atual[7])==config_atual[8]。括号中的部分是 truefalse,它被隐式转换为 int 类型(或者 config_atual[8] 的类型比 int 更宽)在第二次比较之前;即 config_atual[8]=={1, 0},其中我使用 {} 中的内容来表示可能性。 可能最终变成false

偶尔以这种方式链接 == 很有用。但在你的情况下它不是,你需要以不同的方式编写表达式;

config_atual[6]==config_atual[7] && config_atual[7]==config_atual[8]

就是这样一种方式。

if (((config_atual[6]==config_atual[7])==config_atual[8]) || 
    ((config_atual[1]==config_atual[4])==config_atual[7]) || 
    ((config_atual[2]==config_atual[4])==config_atual[6]))
{
   if (config_atual[7]=='X')
       cout << "O Jogador ganhou!" << endl;
   else if (config_atual[7]=='O')
       cout << "O Computador ganhou!" << endl;
}