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)
有人可以向我解释为什么会发生这种情况以及如何解决这个问题吗?
您已声明x为 \xe2\x80\x93 的向量int,但您在调用std::find(i变量)中查找的值是size_t. 这是一个无符号类型,因此出现警告。
解决此问题的一种方法是在调用中强制转换i为 an :int
if (std::find(x.begin(), x.end(), static_cast<int>(i)) != x.end())\nRun Code Online (Sandbox Code Playgroud)\n另一种选择(取决于您的用例)是将声明为无符号整数类型x的向量:
std::vector<unsigned int> x(10);\nRun Code Online (Sandbox Code Playgroud)\n