Что было бы ближе было бы к союзу. Проблема заключается в том, что строка litteral имеет нуль в его последнем символ, но это должно работать:
union {
char chr[3 * sizeof(double) + 1];
double arr[3];
} val = { "\xe3\x3b\xef\xf6\xc1\x78\xc6\x3f\xf9\x37\x5a"
"\x8d\xfd\xae\x75\x3f\x62\xe9\x58\x48\x4f\x49\xc6\x3f" };
Просто, как он использует дополнительные байты там будет потрачена впустую часть памяти (обычно 4 байта на 32 битную машине)
Ссылки на стандарт:
в с а (не обязательное) примечание говорит, что она должна работать в 6.5.2.3 Структура и члены профсоюза
Если элемент, используемый для доступа к содержимому объекта объединения, не совпадает с элементом, который последний раз использовался для , сохраните значение в объекте, соответствующая часть представления объекта значения переинтерпретируется в качестве представления объекта в новый тип, как описано в 6.2.6 (процесс иногда называют «типа каламбурным»)
Я не смог найти какие-либо ссылок на C++ говорит ли это разрешено или нет, но все общих компиляторы принимают его. Чем больше отношение я мог бы найти в
9,5 Союзы [class.union]
В союзе, в лучшем случае один из не-статические данные могут быть активны в любое время, то есть, значение из большинство из нестатических элементов данных могут быть сохранены в объединении в любое время ... Все нестатические члены данных объединенного объекта имеют одинаковый адрес.
, который объясняет, почему она могла бы работать
и:
3,10 Lvalues и rvalues [basic.lval]
§10 Если программа пытается получить доступ к хранимой стоимости объект через значение gl, отличное от одного из следующих типов, поведение не определено ... [союзный доступ не указан]
, в котором четко сказано, что это приводит к неопределенному поведению. Проблема в том, что тот же абзац (известный как строгий псевдоним) также существует в выражениях C 6.5 §7 ...
TL/DR: Союзный путь явно действителен в C и, вероятно, UB в C++, поэтому мой совет должен был помещать его в блок компиляции C, связанный с программой на C++.
Нет, нет синтаксиса для инициализации объектного представления объекта в точке определения. –
@KerrekSB: Разве это не слишком общее? – alk
@ Jarod42 - Не в C это не будет. Это может быть значение ловушки или определенная реализация, но не UB. – StoryTeller