Почему C разрешает доступ к объекту с использованием "типа символа":
6.5 Выражения (C)
Объект должен иметь сохраненное значение, доступное только с помощью выражения lvalue, которое имеет один из следующих типов:
- тип символа.
но С++ допускает char и без знака char?
3.10 Lvalues и rvalues (С++)
Если программа пытается получить доступ к сохраненному значению объекта через значение gl другого, чем одно из следующих типов, поведение undefined:
- a char или неподписанный char тип.
Еще одна часть подписанной char ненависти (цитата из стандарта С++):
3.9 Типы (С++)
Для любого объекта (кроме подобъекта базового класса) тривиально-скопируемого типа T, независимо от того, имеет ли объект правильное значение типа T, базовые байты, составляющие объект, могут быть скопированы в массив char или без знака char. Если содержимое массива char или без знака char будет скопировано обратно в объект, объект должен сохранить первоначальное значение.
И из стандарта C:
6.2.6 Представления типов (C)
Значения, хранящиеся в объектах без битового поля любого другого типа объекта, состоят из бит n × CHAR_BIT, где n - размер объекта этого типа, в байтах. Значение может быть скопировано в объект типа без знака char [n] (например, memcpy); результирующий набор байтов называется представлением объекта значения.
Я вижу много людей в stackoverflow, потому что unsigned char - единственный тип символа, который не имеет битов заполнения, но раздел C99 6.2.6.2. Целочисленные типы говорит
подписанный char, не должен иметь никаких добавочных битов
Итак, какова истинная причина этого?