9

今天我第一次构建了我的项目的 64 位版本。基本上它编译、链接和运行正常,除了抱怨新的 64 位 size_t 类型和简单的 int 类型之间不兼容的警告。这主要发生在我的代码中的这种情况下:

void func(std::vector<Something> &vec)
{
    int n = vec.size();
    for (int i=0; i < n; i++)
    {
        ....vec[i]....
    }
}

这很容易解决,我读过一篇文章说应该使用 size_t 或 ptrdif_t 作为循环索引。但是在这种情况下我能做些什么呢?

void outsideLibraryFunc(int n);

void func(std::vector<Something> &vec)
{
    int n = vec.size();
    outsideLibraryFunc(n);
}

我无法更改外部库的函数声明,它需要一个 int 类型的参数,我需要将向量元素的数量传递给它。除了禁用编译器警告之外,我还能做什么?

4

2 回答 2

10

对 进行显式强制转换int,例如

void outsideLibraryFunc(int n);

void func(std::vector<Something> &vec)
{
    outsideLibraryFunc(static_cast<int>(vec.size()));
}

它并没有消除转换size_t为的任何潜在问题int,但它确实告诉编译器您正在故意进行转换,并且不会警告您。

于 2010-09-30T17:45:17.200 回答
4

投吗?严重的是,如果您无法更改外部库,那么您无能为力。为了更加安全地检查溢出。

于 2010-09-30T17:46:07.147 回答