如何避免64位C++版本中size_t和int类型的问题?

neu*_*rte 9 c++ 64-bit size-t

今天我第一次制作了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,但它确实告诉编译器你是故意进行转换,它不会警告你.