uintptr_t 与 DWORD_PTR 的用法
Usage of uintptr_t vs DWORD_PTR
两者都用于存储地址和进行指针运算,都在 WinAPI 中定义,我什么时候应该使用 uintptr_t
(cstdint) 与 DWORD_PTR
(Windows.h)?在x86和x86_64中分别是32位和64位
A DWORD_PTR
is an unsigned long
type used for pointer precision. It is used when casting a pointer to an unsigned long
type to perform pointer arithmetic. DWORD_PTR
is also commonly used for general 32-bit parameters that have been extended to 64 bits in 64-bit Windows.
我不打算让我的代码具有可移植性,我受困于 WinAPI。
什么类型是最佳用例?
Prefer uintptr_t
it is part of the C++ standard as of C++11 and later. DWORD_PTR 特定于 Visual C++,因此不可移植。
虽然 Visual C++ 可能会选择将 uintptr_t
实现为 DWORD_PTR
或 unsigned long
,这取决于他们,但坚持使用标准库更安全.
uintptr_t
(在 C++ 中实际上是 std::uintptr_t
)是 not 在 WinAPI 中定义的,它是在标准 C++ 头文件 <cstdint>
中定义的。标准C++库由C++语言定义,与WinAPI无关
如果您想使用该类型与 WinAPI 进行交互,请使用 DWORD_PTR
,因为这是 WinAPI 函数所期望的。
对于其他用途,完全由您决定。我更喜欢标准类型而不是特定于平台的类型,所以我会使用 std::uintptr_t
,但两者都可以。
两者都用于存储地址和进行指针运算,都在 WinAPI 中定义,我什么时候应该使用 uintptr_t
(cstdint) 与 DWORD_PTR
(Windows.h)?在x86和x86_64中分别是32位和64位
A
DWORD_PTR
is anunsigned long
type used for pointer precision. It is used when casting a pointer to anunsigned long
type to perform pointer arithmetic.DWORD_PTR
is also commonly used for general 32-bit parameters that have been extended to 64 bits in 64-bit Windows.
我不打算让我的代码具有可移植性,我受困于 WinAPI。 什么类型是最佳用例?
Prefer uintptr_t
it is part of the C++ standard as of C++11 and later. DWORD_PTR 特定于 Visual C++,因此不可移植。
虽然 Visual C++ 可能会选择将 uintptr_t
实现为 DWORD_PTR
或 unsigned long
,这取决于他们,但坚持使用标准库更安全.
uintptr_t
(在 C++ 中实际上是 std::uintptr_t
)是 not 在 WinAPI 中定义的,它是在标准 C++ 头文件 <cstdint>
中定义的。标准C++库由C++语言定义,与WinAPI无关
如果您想使用该类型与 WinAPI 进行交互,请使用 DWORD_PTR
,因为这是 WinAPI 函数所期望的。
对于其他用途,完全由您决定。我更喜欢标准类型而不是特定于平台的类型,所以我会使用 std::uintptr_t
,但两者都可以。