2

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

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

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

4

2 回答 2

8

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

虽然 Visual C++ 可以选择实现uintptr_t为 aDWORD_PTRunsigned long在引擎盖下实现,但这取决于他们,您更安全地坚持使用标准库。

于 2015-08-19T15:45:22.730 回答
2

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

如果您想使用该类型与 WinAPI 交互,DWORD_PTR请按照 WinAPI 函数所期望的方式使用。

对于其他用途,这完全取决于您。我更喜欢标准类型而不是特定于平台的类型,所以我会使用std::uintptr_t,但任何一种都是可能的。

于 2015-08-19T15:49:57.530 回答