C4389 signed/unsigned 仅对 x86 编译 c++ 不匹配

C4389 signed/unsigned mismatch only for x86 compilation c++

当我使用警告级别为 4 的 x86 编译器在 Visual Studio 中执行以下代码时,我看到 C4389:“'==': signed/unsigned 不匹配”编译器警告。

#include <algorithm>
#include <vector>

void functionA()
{
    std::vector<int> x(10);

    for(size_t i = 0; i < x.size(); i++)
    {
        if (std::find(x.begin(), x.end(), i) != x.end())
        continue;
    }
}

有人可以向我解释为什么会发生这种情况以及我该如何解决吗?

这里是linkhttps://godbolt.org/z/81v3d5asP在线编译器,你可以在其中观察到这个问题。

您已将 x 声明为 int 的向量 – 但您在调用 std::findi 变量)时要查找的值是一个size_t。这是一个无符号类型,因此是警告。

解决此问题的一种方法是在调用中将 i 转换为 int

if (std::find(x.begin(), x.end(), static_cast<int>(i)) != x.end())

另一种选择(取决于您的用例)是将 x 声明为 unsigned 整数类型的向量:

std::vector<unsigned int> x(10);