Может ли обычный `char` иметь значения ловушки?
ПРОЧТИ МЕНЯ
A "значение ловушки", или же"представление ловушки" для типаT
, это битовая комбинация (основного хранилища), которая выдает недопустимое значениеT.
Попытка интерпретировать представление неверного значения приведет кнеопределенное поведение.
Другаявопрос начал жаркую дискуссию оchar
и возможность реализации, имеющейпредставления ловушек для этого.
Вопрос:
Можноchar
возможно есть значения ловушек?Цитаты, которые были упомянуты в предыдущем обсуждении:Эти разделы являются наиболее цитируемыми во время предыдущей аргументации, они противоречат?
3.9.1p1
Основные типы [basic.fundamental]
Это определяется реализацией, является лиchar
может содержать отрицательные значения. Символы могут быть явно объявленыsigned
или жеunsigned
.
A char,
a signed char,
иunsigned char
занимают одинаковое количество памяти и имеют одинаковые требования к выравниванию (3.11); то есть они имеют одинаковое объектное представление. Для символьных типов все биты представления объекта участвуют в представлении значения.
Для типов символов без знака все возможные битовые комбинации представления значения представляют собой числа. Эти требования не распространяются на другие типы.
В любой конкретной реализации, простойchar
объект может принимать либо те же значения, что иsigned char
илиunsigned char;
какой из них определяется реализацией.
3.9p2Типы [basic.types]
Для любого объекта (кроме подобъекта базового класса) тривиально копируемого типаT,
содержит ли объект допустимое значение типаT
нижележащие байты (1.7), составляющие объект, могут быть скопированы в массивchar
или жеunsigned char.
Если содержимое массиваchar
или жеunsigned char
копируется обратно в объект, объект должен впоследствии сохранить свое первоначальное значение.