繁体   English   中英

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

[英]How to avoid problems with size_t and int types in 64bit C++ builds?

今天我第一次制作了64bit的项目版本。 基本上它编译,链接并运行正常,除了抱怨新的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类型的参数,我需要传递向量元素的数量。 除了禁用编译器警告外,我还能做些什么?

int进行显式转换,例如

void outsideLibraryFunc(int n);

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

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

投了吗? 说真的,如果你不能改变外部库,你就无能为力。 为了额外安全检查溢出。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM