提问人:cupbear 提问时间:8/9/2022 最后编辑:Jeremy Friesnercupbear 更新时间:8/9/2022 访问量:115
C++ 短路评估的条件是什么?[复制]
C++ What are the conditions of short circuit evaluation? [duplicate]
问:
if (i - word.size() >= 0 && dp[i - word.size()] && s.substr(i - word.size(), word.size()) == word)
dp[i] = true;
i - word.size() >= 0
是我用来防止越界索引的条件。预期是,如果不满足条件,方程将短路,参考不会发生。dp[i - word.size()]
但是,无论第一个条件如何,引用都会发生。只有当我将代码更改为以下内容时,它才开始短路。
int lookback = i - word.size();
if (lookback >= 0 && dp[lookback] && s.substr(i - word.size(), word.size()) == word)
dp[i] = true;
为什么第二个代码短路,而第一个代码不会?我读过,如果逻辑运算符过载,则不会发生短路,但这里似乎并非如此,我无法弄清楚为什么它没有发生。&&
||
下面是上下文的完整代码
bool wordBreakFaulty(string s, vector<string>& wordDict) {
int n = s.size() + 1;
vector<bool> dp(n, false);
dp[0] = true;
for (int i = 1; i < dp.size(); ++i) {
for (auto& word : wordDict) {
if (i - word.size() >= 0 && dp[i - word.size()] && s.substr(i - word.size(), word.size()) == word)
dp[i] = true;
}
}
return dp.back();
}
答: 暂无答案
下一个:仅在未发现错误时启用提交按钮
评论
word.size()
int lookback = i - word.size();
i - word.size() >= 0