【问题标题】:What's the correct type to use for pointer subtraction on x64?在 x64 上用于指针减法的正确类型是什么?
【发布时间】:2010-05-30 04:58:49
【问题描述】:

我刚刚开始使用 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 来执行此操作。

【问题讨论】:

    标签: visual-c++ 64-bit


    【解决方案1】:

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

    #include <cstddef>
    ptrdiff_t
    

    我无法对此进行测试,因为我这里没有 VC++ (Linux),但 ptrdiff_t 是为指针差异而设计的。 GCC 确认:)。

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

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

    【讨论】:

    • 在 C++ 中是std::ptrdiff_t
    猜你喜欢
    • 2011-03-28
    • 2021-10-08
    • 2016-09-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-18
    • 2021-08-16
    相关资源
    最近更新 更多