[英]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.