首页 > 代码库 > 一个短路求值引起的一个小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)//这种更好,避免了后续的无谓的比较
-------------
写代码这么多年了,竟然还是会犯这种错误。。。
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。