C++ 警告:表达式结果未使用

C++ 警告:表达式结果未使用,c++,warnings,C++,Warnings,为什么编译器在此代码的最后一个else语句中发出警告:表达式结果未使用 PowerballLottery::WinningPossibility PowerballLottery::checkTicket(PowerballTicket ticket) { int count = 0; if (ticket.getBall1() == getball1() || ticket.getBall1() == getball2() || ticket.getBall1() == get

为什么编译器在此代码的最后一个
else
语句中发出
警告:表达式结果未使用

PowerballLottery::WinningPossibility PowerballLottery::checkTicket(PowerballTicket ticket)
{
    int count = 0;
    if (ticket.getBall1() == getball1() || ticket.getBall1() == getball2() || ticket.getBall1() == getball3() || ticket.getBall1() == getball4() || ticket.getBall1() == getball5())
        count++;
    if (ticket.getBall2() == getball1() || ticket.getBall2() == getball2() || ticket.getBall2() == getball3() || ticket.getBall2() == getball4() || ticket.getBall2() == getball5())
        count++;
    if (ticket.getBall3() == getball1() || ticket.getBall3() == getball2() || ticket.getBall3() == getball3() || ticket.getBall3() == getball4() || ticket.getBall3() == getball5())
        count++;
    if (ticket.getBall4() == getball1() || ticket.getBall4() == getball2() || ticket.getBall4() == getball3() || ticket.getBall4() == getball4() || ticket.getBall4() == getball5())
        count++;
    if (ticket.getBall5() == getball1() || ticket.getBall5() == getball2() || ticket.getBall5() == getball3() || ticket.getBall5() == getball4() || ticket.getBall5() == getball5())
        count++;
    bool match = false;
    if (ticket.getPowerball() == getpowerball())
        match = true;
    if ((count == 0) && (match == false))
        return PowerballLottery::WinningPossibility::NOTWINNING;
    else if ((count == 0) && (match == true))
        return PowerballLottery::WinningPossibility::POWERBALL;
    else if ((count == 1) && (match == true))
        return PowerballLottery::WinningPossibility::ONEPLUSPOWERBALL;
    else if ((count == 2) && (match == true))
        return PowerballLottery::WinningPossibility::TWOPLUSPOWERBALL;
    else if ((count == 3) && (match == false))
        return PowerballLottery::WinningPossibility::THREE;
    else if ((count == 3) && (match == true))
        return PowerballLottery::WinningPossibility::THREEPLUSPOWERBALL;
    else if ((count == 4) && (match == false))
        return PowerballLottery::WinningPossibility::FOUR;
    else if ((count == 4) && (match == true))
        return PowerballLottery::WinningPossibility::FOURPLUSPOWERBALL;
    else if ((count == 5) && (match == false))
        return PowerballLottery::WinningPossibility::FIVE;
    else ((count == 5) && (match == true));
        return PowerballLottery::WinningPossibility::FIVEPLUSPOWERBALL;
}

实际上,代码是

if ((count == 0) && (match == false))
....
else if ((count == 5) && (match == false))
    return PowerballLottery::WinningPossibility::FIVE;
else
    ((count == 5) && (match == true)); //<- Expression results unused 

return PowerballLottery::WinningPossibility::FIVEPLUSPOWERBALL;
if((计数=0)和&(匹配=false))
....
如果((计数==5)和(&(匹配==false))
返回Powerball彩票::中奖可能性::五;
其他的

((计数=5)和&(匹配=true))// 你可以说
else
else if()
;您的表达式中没有
if
,编译器正在尽最大努力使用它。

其他人已经指出了编译器警告您的问题

现在让我们来考虑一下它没有警告你的问题:你的代码比它的任何原因都复杂得多。

本质上,用户在彩票(动力球除外)表格集中挑选和选择球。我们关心的是这两个集合的交集的大小。C++标准库提供了工具,使任务变得简单很多(而且,我觉得你的代码< PowerBallTicket > /Cord>类的方法比帮助也要做得更多):

有了这些,我们的回报看起来是这样的:

return rets[ticket.getpowerball() == getpowerball()][matches.size()];
上面的代码指出了一个改进:与所有的
getballX()
成员函数不同,您应该首先将数据存储在
集合中,然后直接对这些集合进行操作。在本例中,看起来您已经做到了,因为“封装”损失了很多,但收获很少(可能没有)。正如从中所说的,这主要是您如何格式化代码的问题,出现该警告是因为

else ((count == 5) && (match == true));
该语句实际上不用于执行存储在结果中的任何计算,也不用于根据结果做出分支决策

语句无论如何都会执行


让人想起了著名的:


也许我不应该把它作为一个答案,但很难将格式化的代码压缩成一个注释:)“好吧,我刚刚投票结束了。”你应该注意到我刚刚改变了主意。在如此大量的互斥情况下,难怪编译器会检测到一些。您可能希望使用一些数组/向量和循环,以使其更易于理解,并减少错误。在我看来,这不应该因为输入错误而关闭。对于一些更有经验的程序员来说,这似乎很琐碎,但这不仅仅是一个打字错误,或者任何同样琐碎的事情。@JerryCoffin可能是的,你是对的。对我来说,它看起来有点像著名的OpenSSL
goto fail错误。撤回我的接近票。@πάνταῥεῖ: 正如那句老话所说,长期的经验可以帮助你理解字里行间的含义。:-)
return rets[ticket.getpowerball() == getpowerball()][matches.size()];
else ((count == 5) && (match == true));
return PowerballLottery::WinningPossibility::FIVEPLUSPOWERBALL;
if ((err = SSLHashSHA1.update(&hashCtx, &signedParams)) != 0)
goto fail;
goto fail;  /* MISTAKE! THIS LINE SHOULD NOT BE HERE */