使用uintptr_t vs DWORD_PTR

时间:2015-08-19 15:41:00

标签: c++ types stdint

两者都用于存储地址和做指针算法,两者都是在WinAPI中定义的,我应该何时使用uintptr_t(cstdint)与DWORD_PTR(Windows.h)?两者分别是x86和x86_64中的32位和64位

  

DWORD_PTR是用于指针精度的unsigned long类型。在将指针转换为unsigned long类型以执行指针运算时使用它。 DWORD_PTR也常用于在64位Windows中扩展到64位的一般32位参数。

我不打算让我的代码可移植,我坚持使用WinAPI。 什么类型的最佳用例?

2 个答案:

答案 0 :(得分:7)

首选uintptr_t它是C ++ 11及更高版本的C ++标准的一部分。 DWORD_PTR特定于Visual C ++,因此不可移植。

虽然Visual C ++可能会选择将uintptr_t实现为DWORD_PTRunsigned long,但这取决于他们要做的事情,您可以更安全地坚持使用标准库。< / p>

答案 1 :(得分:1)

uintptr_t(在C ++中实际为std::uintptr_t)在WinAPI中定义 not ,它在标准C ++标头<cstdint>中定义。标准C ++库由C ++语言定义,与WinAPI无关。

如果要使用该类型与WinAPI进行交互,请使用DWORD_PTR作为WinAPI函数所期望的内容。

对于其他用途,它真的取决于你。我更喜欢标准类型而非平台特定类型,因此我使用std::uintptr_t,但两种方式都可以。