在x64上用于指针减法的正确类型是什么?

时间:2010-05-29 20:48:24

标签: visual-c++ 64-bit

我刚刚开始使用x64编译。

我有几个char *,我正在减去它们。 使用32位编译,这可以工作:

char * p1 = ....
char * p3 = ... 
int delta = p3 - p1;

但如果我为x64编译,我会收到警告:

 warning C4244: 'initializing' : conversion from '__int64' to 'int', 
      possible loss of data

使用哪种正确的类型来表示两个指针之间的区别,这两个指针在x86和x64编译中都有效?

我知道我可以在x64编译中使用__int64,但是我希望它也适用于x86,我不想在这里嵌入#ifdef来实现它。

1 个答案:

答案 0 :(得分:7)

有一种特殊的指针差异类型。

#include <cstddef>
ptrdiff_t

我无法测试这个,因为我这里没有VC ++(Linux),但ptrdiff_t用于指针差分。海湾合作委员会确认:)。

每个平台的长度都是正确的!

[更新:C ++使用std::ptrdiff_t,感谢sbi!]