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::find
(i
变量)时要查找的值是一个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);
当我使用警告级别为 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::find
(i
变量)时要查找的值是一个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);