if() 跳过我的变量检查

if() skipping my variable check

本文关键字:我的 变量 检查 if      更新时间:2023-10-16

我有以下代码:

std::vector<std::string> GetSameID(std::vector<string>& allFiles, int id) {
    std::vector<std::string> returnVector;
    for(std::vector<string>::iterator it = allFiles.begin(); it != allFiles.end(); ++it) {
        if(GetID(*it) == id) {
            int index = (*it).find("_CH2.raw");
            if(index > 0) {
                continue; //this works
            }
            if(0 < ((*it).find("_CH2.raw")))  {
                continue; //this doesn't
            }
            string ext =  PathFindExtension((*it).c_str());
            if(ext == ".raw") {
                returnVector.push_back(*it);
            }
        }
    }
    return returnVector;
}

我的问题是,为什么if(0 < ((*it).find("_CH2.raw")))不是这样工作的?我的文件已命名ID_0_X_0_Y_128_CH1.rawID_0_X_0_Y_128_CH2.raw(示波器上通道 1 和通道 2 的不同 ID,X 和 Y)。

当我绕开很长时间(分配索引,然后检查索引)时,它可以工作,我不明白为什么易读性更强的 imo 的短版本不起作用。

根据

http://en.cppreference.com/w/cpp/string/basic_string/find,string::find()返回一个size_t - 这是一个无符号类型 - 所以它永远不会小于零。

当它找不到某些东西时,它会返回 string::npos ,这也是一个无符号类型,但是当你把它推到 int 中(隐式转换它)时,它变成了一个负值——这就是你的第一组代码工作的原因。