На днях Я столкнулся с этой конструкцией:
static_cast<size_type>(-1)
в некотором примере кода на С++, который, скорее всего, (в зависимости от того, где находится size_type
), эквивалентен следующему C:
(size_t)(-1)
Как я понимаю, он работает на основе того, что представление -1 в двухпараметрической арифметике - это 11111...1
, для такого количества бит, как у вас, так что это быстрый способ получить максимальное значение, которое неподписанный тип типа size_t
может иметь место. Тем не менее, я понимаю, что C не гарантирует, что будет использоваться двойной набор; если реализация C использует одно дополнение, это будет на 1 меньше максимального значения, и если он использует значение знака, оно будет чуть более половины максимального значения.
Есть ли какая-то морщина, которую мне не хватает, что гарантирует, что это работает правильно, независимо от того, используется ли выражение целых чисел? Различия между C и С++ (многие удивительные вещи)?