Причина ошибки при использовании объединения
Есть у меня объединение:
union A {
double d;
char c[10];
};
И когда я хочу его использовать, то мне не позволяют сделать с типом char:
A o = { "asd" }; A s = {12}; \\ Значение типа const char * нельзя использовать для инициализации сущности типа double
Однако если я в объединении поменяю местами char и double, то никаких ошибок нет. Почему так?
Ответы (2 шт):
Потому что первое поле double d; можно инициализировать только литералом 12, а char c[10]; можно инициализировать как литералом "asd" (4 char), так и 12 (1 char). А вообще стоит явно указывать, какое поле иницилизировать, тогда таких проблем не будет.
A o{ .c{"asd"} };
A s{ .d{12} };
При инициализации unionа инициализируется всегда только первое поле (а не совпадающее по типу с инициализатором).
Исключение - если явно указать имя желаемого поля, например A o{.c = "blah"};.