Это хорошо, если у вас есть переменная, которая может быть либоchar
, илиint
, или ...
Он часто используется в структурах, которые содержат фактический тип союза. Часто используется парсерами для возврата токена из лексера. Нечто подобное:
struct token
{
int token_type;
union
{
char *s; /* For string or keyword tokens */
double f; /* For floating point tokens */
long i; /* For integer tokens */
} token_value;
};
В приведенной выше структуре, используемый элемент в token_value
элементе зависит от token_type
члена.
Профсоюзы также могут быть использованы злоупотребляя данные в союзе, где вы установили один элемент переменной и прочитать другую. Например, это можно использовать для преобразования числа с плавающей точкой в ряд байтов.
Как
union data
{
char data[sizeof(double)];
double value;
};
Установив value
элемент, вы можете прочитать отдельные байты значения double
без типажей или арифметики указателей. Это технически реализуемое поведение, что означает, что компилятор может его не допускать. Это очень часто используется, поэтому все современные компиляторы позволяют это делать.
Пожалуйста, найдите перед отправкой вопросов ... – RedX
В принятом ответе упоминается _variant datatype_. В чем его недостаточно? Пример? Структура данных стека. – mouviciel
@Dayalrai ... большое спасибо! – user2322888