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