C4389 有符号/无符号不匹配仅适用于 x86 编译 C++

mil*_*nov 1 c++ std compiler-warnings

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

#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;
    }
}
Run Code Online (Sandbox Code Playgroud)

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

这是在线编译器的链接https://godbolt.org/z/81v3d5asP ,您可以在其中观察到此问题。

Adr*_*ica 5

您已声明x为 \xe2\x80\x93 的向量int,但您在调用std::findi变量)中查找的值是size_t. 这是一个无符号类型,因此出现警告。

\n

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

\n
if (std::find(x.begin(), x.end(), static_cast<int>(i)) != x.end())\n
Run Code Online (Sandbox Code Playgroud)\n

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

\n
std::vector<unsigned int> x(10);\n
Run Code Online (Sandbox Code Playgroud)\n