如何解决“ ==”操作数中比较括号的建议

时间:2019-05-08 17:41:05

标签: c++ warnings qt-creator compiler-warnings parentheses

我有类似的代码

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是一个char数组,其中包含游戏板的当前配置。

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

4 个答案:

答案 0 :(得分:3)

C ++中的

==运算符不能那样工作。它仅允许两个操作数,这意味着a == b == c之类的构造将无法正常工作。改写为(a == b && b == c)形式的条件(并注意括号)。

答案 1 :(得分:3)

表达式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]

就是这样一种方式。

答案 2 :(得分:1)

您可以这样做

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]))

答案 3 :(得分:0)

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;
}