У меня был разговор с кем-то по IRC, и этот вопрос возник.Стандарт позволяет нам изменять объект типа int
на char
lvalue.
int a;
char *b = (char*) &a;
*b = 0;
Разрешено ли нам делать это в противоположном направлении, если мы знаем, что выравнивание в порядке?
Проблема, с которой я сталкиваюсь, заключается в том, что правило наложения имен не распространяется напростой случай следующего, если рассматривать псевдоним как несимметричное отношение
int a;
a = 0;
Причина состоит в том, что каждый объект содержит последовательность объектов sizeof(obj)
unsigned char
(называемых "представление объекта ").Если мы изменим int
, мы изменим некоторые или все эти объекты.Однако правило псевдонимов гласит, что нам разрешено изменять int
на char
или unsigned char
, но не наоборот.Другой пример
int a[1];
int *ra = a;
*ra = 0;
3.10 / 15 («Совокупный или объединенный тип, который включает в себя ...») описывает только одно направление, но на этот раз нам нужно наоборот («Тип, который являетсятип элемента или нестатического элемента данных агрегата ... ").
Предполагается ли другое направление?Этот вопрос также относится к C.