Re[6]: Откуда эта лютая любовь к знаковым целым?
От: vopl Россия  
Дата: 06.05.20 16:55
Оценка:
Здравствуйте, Vamp, Вы писали:


V>> Если этот код загнать на платформу, в которой размер int равен размеру указателя — беззнаковый вариант будет, как минимум, не хуже. А обычно он чуть-чуть лучше.


V>Размер указателя и результата их вычитания не обязаны совпадать.


Ага. Этим я хотел показать что приведенный тобою проблематичный пример — он платформ-специфик. Не носит универсального характера. Частный случай.

V>>Очевидно, что проблему можно решить и более правильно — путем использования уместного типа, std::size_t. Ирония заключается в том, что size_t — без-знаковый тип.


V>Причем тут size_t и почему ты считаешь, что он "более уместен"? Результат вычитания двух указателей имеет тип ptrdiff_t. Можно легко представить платформу, где первый гораздо меньше второго.


size_t меньше ptrdiff_t? Вряд ли. Стандарт требует чтобы этот тип вмещал размер любого объекта, включая тот самый массив, разницу индексов которого вмещает ptrdiff_t. Таким образом, он гарантированно не меньше ptrdiff_t.

Он "более уместен" потому что не имеет знака, который на самом деле не нужен. Из за этого, например, мой компилятор не генерирует дополнительную проверку на отрицательность в том цикле. То есть, получается код на одну инструкцию короче. Да, она не в теле цикла, а в шапке, но все же.

V>Я могу понять, почему используют int, но уж если использовать специальный тип, то следует использовать правильный.


Вообще, правда у каждого своя.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.