【发布时间】:2010-09-30 17:42:00
【问题描述】:
今天我第一次构建了我的项目的 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 类型的参数,我需要将向量元素的数量传递给它。除了禁用编译器警告,我还能做什么?
【问题讨论】:
-
+1 问:我不知道 size_t != unsigned int
-
@pm100 它可以是,在大多数 32 位系统上它是,但它不是必须的。特别是,在使用 LP64 或 LLP64 约定的 64 位系统(大多数现代 64 位系统)中,它往往大于
unsigned int。 -
ssize_t 有时可用于有符号的 size_t