Причина ошибки при использовании объединения

Есть у меня объединение:

union A {       
   double d;
   char c[10];
};

И когда я хочу его использовать, то мне не позволяют сделать с типом char: A o = { "asd" }; A s = {12}; \\ Значение типа const char * нельзя использовать для инициализации сущности типа double

Однако если я в объединении поменяю местами char и double, то никаких ошибок нет. Почему так?


Ответы (2 шт):

Автор решения: user7860670

Потому что первое поле double d; можно инициализировать только литералом 12, а char c[10]; можно инициализировать как литералом "asd" (4 char), так и 12 (1 char). А вообще стоит явно указывать, какое поле иницилизировать, тогда таких проблем не будет.

A o{ .c{"asd"} };
A s{ .d{12} };
→ Ссылка
Автор решения: HolyBlackCat

При инициализации unionа инициализируется всегда только первое поле (а не совпадающее по типу с инициализатором).

Исключение - если явно указать имя желаемого поля, например A o{.c = "blah"};.

→ Ссылка