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

Che*_*eso 1 64-bit visual-c++

我刚刚开始使用x64编译.

我有几个char*,我正在减去它们.通过32位编译,这可以工作:

char * p1 = ....
char * p3 = ... 
int delta = p3 - p1;
Run Code Online (Sandbox Code Playgroud)

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

 warning C4244: 'initializing' : conversion from '__int64' to 'int', 
      possible loss of data
Run Code Online (Sandbox Code Playgroud)

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

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

Luk*_*keN 7

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

#include <cstddef>
ptrdiff_t
Run Code Online (Sandbox Code Playgroud)

我无法测试这个,因为我这里没有VC++(Linux),但它ptrdiff_t是针对指针差分的.GCC确认:).

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

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

  • 在C++中,它是`std :: ptrdiff_t`. (2认同)