项目场景:
&&和||逻辑运算的短路求值法则,第二操作数不求
问题描述
刷题时遇到的一个问题:
while( )里面的&&运算当左右都为true时则为true,但当左操作数为false时则必然为false,此时右操作数还需要求值吗? 我觉得不需要,但VS2019就是给我报错s[-1]不存在啥的
string reverseWords(string s) {
string r;
int j;
for (int i = s.length()-1; i >= 0; i--) {
if (s[i] != ' ') {
j = i;
while (i>=0&&s[i] != ' ') { //报错
i--;
}
r.insert(r.end(), begin(s) + i + 1, begin(s) + j + 1);
r += " ";
}
}
return r;
}
原因分析:
cppreference上明确写出:
对于内建的逻辑与运算符,若两个运算数都是 true 则结果为 true。否则结果为 false。此运算符短路求值:若第一操作数为 false,则不求值第二操作数。
再把代码复制到leetcode上,通过了,没报错。。。
瞬间对VS2019产生了怀疑,于是用VScode试了下,也是可以的。。弃了弃了