Оба используются для хранения адресов и выполнения арифметики указателей, оба определены в WinAPI, когда я должен использовать uintptr_t
(cstdint) против DWORD_PTR
(Windows.h)? Оба 32-битные и 64-битные в x86 и x86_64 соответственно
DWORD_PTR
являетсяunsigned long
тип используется для точности указателя. Используется при приведении указателя наunsigned long
тип для выполнения арифметики указателя.DWORD_PTR
также обычно используется для общих 32-битных параметров, которые были расширены до 64 бит в 64-битной Windows.
Я не собираюсь переносить мой код, я застрял с WinAPI.
Какой тип является лучшим вариантом использования?
предпочитать uintptr_t
это часть стандарта C ++, начиная с C ++ 11 и более поздних. DWORD_PTR специфичен для Visual C ++ и поэтому не переносим.
Хотя Visual C ++ может выбрать для реализации uintptr_t
как DWORD_PTR
или же unsigned long
под капотом, который им решать, вам безопаснее придерживаться стандартной библиотеки.
uintptr_t
(на самом деле std::uintptr_t
в C ++) есть не определенный в WinAPI, он определен в стандартном заголовке C ++ <cstdint>
, Стандартная библиотека C ++ определяется языком C ++ и не имеет ничего общего с WinAPI.
Если вы хотите использовать тип для взаимодействия с WinAPI, используйте DWORD_PTR
поскольку это то, что ожидают функции WinAPI.
Для других целей это действительно зависит от вас. Я предпочитаю стандартные типы по сравнению с платформой, поэтому я бы использовал std::uintptr_t
, но либо возможно.