c++ - 调用 string.find() 函数并将其返回值分配给 if 条件内的变量
问题描述
当我将 .find() 函数放入 if 条件时,我无法理解到底发生了什么。类似的 for 循环调用似乎效果很好。
我的部分代码是这样的:
size_t endPos = strbuf.find(endSeq)+endSeq.size();
cout<<endPos<<endl;
if (size_t endPosif = strbuf.find(endSeq)+endSeq.size() != string::npos)
{
cout<<endPosif<<endl;
}
for (size_t endPosfor = strbuf.find(endSeq)+endSeq.size();endPosfor != string::npos;
endPosfor=strbuf.find(startSeq,endPosfor+1)+endSeq.size())
{
cout<<endPosfor<<endl;
}
输出:
466
1
466
是什么导致了这种行为?我想在 if 语句中使用 endPosif。
解决方案
我想知道为什么我的变量在语句中等于 1。那是我的问题
if (size_t endPosif = strbuf.find(endSeq)+endSeq.size() != string::npos)
这个strbuf.find(endSeq)
- 当什么都没有找到时返回
string::npos
(就像)-1
- 或拉格内的东西
<0, strbuf.size() - endSeq.size()>
当你添加到那个endSeq.size()
(什么永远不会是零)时,结果总是不同的string::npos
。
所以这strbuf.find(endSeq)+endSeq.size() != string::npos
被评估为true
。
true
转换为1
时转换为size_t
。
所以你有两个错误:
- 没有找到任何东西时错误地处理场景
- 评估顺序(这就是为什么
user7860670
要写括号)
推荐阅读
- c# - 如何通过反射获取内部属性值
- typescript - “未知”类型的参数不能分配给“字符串”类型的参数
- django-rest-framework - Django:自定义创建和检索序列化程序所需的字段类型
- csv - CSV 到字典 - Python
- android - 我似乎无法弄清楚如何测试 BottomBar Navigation
- r - R:随机抽样将学生分配到相等的组。了解 rep() 参数 length.out 到 sample()
- c# - WPF - 从第二个窗口返回到第一个窗口
- python - GridSearchCV:获取模型的属性
- java - 谁能解释一下“GeofenceErrorMessages”类发生了什么?
- html - SVG 不需要的填充