Я имею дело с некоторым кодом на работе, который включает выражение формы
-(sizeof(struct foo))
то есть. отрицание a size_t
, и я не понимаю, что требования C и С++ требуют от компиляторов, когда они видят это. В частности, при поиске здесь и в другом месте sizeof
возвращает неподписанное целочисленное значение типа size_t
. Я не могу найти четкую ссылку для указанного поведения при отрицании целого числа без знака. Есть ли какие-либо, и если да, то что это такое?
Edit: Хорошо, поэтому есть некоторые хорошие ответы относительно арифметики на неподписанные типы, но неясно, что это на самом деле такое. Когда это отрицает, работает ли оно беззнаковым целым или преобразуется в подписанный тип и что-то делает с этим? Является ли поведение ожиданием от стандартов "представьте себе отрицательное число одинаковой величины, а затем примените правила" переполнения "для неподписанных значений"?