Что такое идиоматический способ определения пределов указателя в C ++? - PullRequest
1 голос
/ 15 июля 2010

Я хотел бы знать во время компиляции диапазон значений для типа указателя. limits.h указывает только максимумы и минимумы для чистых чисел. Я не хочу использовать жестко запрограммированные константы, и я предпочитаю не вычислять максимум, используя sizeof(foo*).

Ответы [ 2 ]

3 голосов
/ 16 июля 2010

Указатели не являются числами.В частности, они не являются абсолютно упорядоченными - учитывая два случайных указателя p и q, вы не можете вычесть один из другого и получить значимый результат - это UB, если они оба не указывают на один и тот же объект (mallocблок памяти, статический или автоматический объект и т. д.).Таким образом, концепция допустимого диапазона указателей не имеет смысла в стандарте C ++.

3 голосов
/ 15 июля 2010

Полагаю, я бы использовал intptr_t.Он определен как целое число, которое может содержать значение указателя, поэтому минимальные / максимальные значения intptr_t должны работать.

может быть больше, чем значения фактического указателя.Но из вашего объяснения класса, которому просто нужны минимальные / максимальные значения, я не верю, что вам нужна полная точность.

...