Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > C/C++: Общие вопросы > comparison between size_t and ptr_diff_t |
Автор: Gwendolen 17.12.2011, 14:02 | ||||
Мне надо преобразовать массив байт в конкретный тип, при необзодимости заменив порядок байт. Собственно с изменением порядка байт и преобразованием проблемы нет, она возникла при проверке влезет ли в конкретный тип пришедший диапазон байт:
Где last и first - итераторы . Получается сравнение знакового ptr_diff_t и беззнакового size_t, на что компилятор, собственно, и ругается:
Как правильно исправить код для того чтобы убрать это предупреждение? |
Автор: boostcoder 17.12.2011, 14:12 |
арифметические операции над указателями/итераторами, дают знаковый тип. sizeof() возвращает беззнаковый. способ решения - какой-то из операндов привести к типу второго. |
Автор: Gwendolen 17.12.2011, 14:34 | ||
Об этом я и написал, вопрос в том к какому типу приводить(склоняюсь приводить к знаковому). На всех ли платформах корректно преобразование size_t к ptr_diff_t? |
Автор: rumit7 17.12.2011, 15:23 | ||||||
Может попробовать так?!
|
Автор: Gwendolen 17.12.2011, 16:43 | ||||||||
Некрасиво, неочевидно, что именно проверяется. Я думал про другой вариант:
Похоже проще просто кастануть тип, ибо размер контейнера никогда не будет соизмерим с размером почти всей доступной памяти, так что можно и не бояться приводить беззнаковый к знаковому(size_t и ptrdiff_t имеют одинаковый размер в байтах):
|
Автор: rumit7 17.12.2011, 16:57 | ||||||||
Тогда можно так:
Конечно на вкус и цвет, как говорится.. но вот со static_cast, код совсем монстрообразный какой-то, хотя может мне так кажется. Update: Все-таки для данного решения нужно указать, что "iterator" должен относиться к http://www.cplusplus.com/reference/std/iterator/, так так именно они поддерживают операцию ">=". |
Автор: volatile 18.12.2011, 01:08 | ||
![]() Добавлено через 6 минут и 12 секунд или даже так: size_t size = abs(last - first); чтоб случайно не перепутать местами. |