首页 > 代码库 > 一个短路求值引起的一个小bug

一个短路求值引起的一个小bug

今天在写一个判断字符串是否回文时因为短路求值问题导致了一个bug,记录如下:

 

代码如下

bool isPal(char str[],int len){    int begin=0;    int end=len-1;    bool result=true;    cout<<str<<endl;    while(begin<end)    {        result=result&&(str[begin++]==str[end--]);    }    cout<<"after "<<str<<endl;    return result;}

运行时发现,在str[]的长度为4时,程序长时间运行而无结果,最后定位到是该函数引起。

str[]="1000"时,begin=0,end=3

result=result&&(str[begin++]==str[end--]);该句执行完毕后,begin=1;end=2;result=false

再次循环时,短路求值,使得begin++与end--不会再被执行,因而无法退出循环。

改为result=(str[begin++]==str[end--])&&result;

或while(begin<end && result)//这种更好,避免了后续的无谓的比较

 

-------------

写代码这么多年了,竟然还是会犯这种错误。。。