今天我第一次制作了64bit的项目版本.基本上它编译,链接并运行正常,除了抱怨新的64位size_t类型和简单int类型之间不兼容的警告.这主要发生在我的代码中这样的情况:
void func(std::vector<Something> &vec)
{
int n = vec.size();
for (int i=0; i < n; i++)
{
....vec[i]....
}
}
Run Code Online (Sandbox Code Playgroud)
这很容易修复,我读了一篇文章说应该使用size_t或ptrdif_t作为循环索引.但是在这种情况下我能做些什么呢?
void outsideLibraryFunc(int n);
void func(std::vector<Something> &vec)
{
int n = vec.size();
outsideLibraryFunc(n);
}
Run Code Online (Sandbox Code Playgroud)
我无法更改外部库的函数声明,它需要一个int类型的参数,我需要传递向量元素的数量.除了禁用编译器警告外,我还能做些什么?
Tyl*_*nry 10
做一个明确的演员int,例如
void outsideLibraryFunc(int n);
void func(std::vector<Something> &vec)
{
outsideLibraryFunc(static_cast<int>(vec.size()));
}
Run Code Online (Sandbox Code Playgroud)
它并没有消除转换size_t到的任何潜在问题int,但它确实告诉编译器你是故意进行转换,它不会警告你.