Использование uintptr_t vs DWORD_PTR

Оба используются для хранения адресов и выполнения арифметики указателей, оба определены в 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.
Какой тип является лучшим вариантом использования?

2

Решение

предпочитать uintptr_t это часть стандарта C ++, начиная с C ++ 11 и более поздних. DWORD_PTR специфичен для Visual C ++ и поэтому не переносим.

Хотя Visual C ++ может выбрать для реализации uintptr_t как DWORD_PTR или же unsigned long под капотом, который им решать, вам безопаснее придерживаться стандартной библиотеки.

7

Другие решения

uintptr_t (на самом деле std::uintptr_t в C ++) есть не определенный в WinAPI, он определен в стандартном заголовке C ++ <cstdint>, Стандартная библиотека C ++ определяется языком C ++ и не имеет ничего общего с WinAPI.

Если вы хотите использовать тип для взаимодействия с WinAPI, используйте DWORD_PTR поскольку это то, что ожидают функции WinAPI.

Для других целей это действительно зависит от вас. Я предпочитаю стандартные типы по сравнению с платформой, поэтому я бы использовал std::uintptr_t, но либо возможно.

1

По вопросам рекламы [email protected]