C/C++

Здравствуйте, структура и объединение в c++

Я знаю что в с++ ,есть структуры (struct) и объединение (union). Мне не понятно только чем они отличаются. Я знаю что union хранит значения в одной памяти, но и еще что переменная именно в момент времени записывается. Можете пожалуйста на простых примерах объяснить их отличия и когда лучше использовать структуру а когда объединение. Заранее спасибо, буду очень благодарен
"union хранит значения в одной памяти" - в этом и различие.
"переменная именно в момент времени записывается" - первый раз об этом слышу.
Роман Горицкий
Роман Горицкий
17 671
Лучший ответ
Например, тебе надо хранить либо целое, либо вещественное значение, но никогда не требуется одновременно хранить и целое, и вещественное значение - это объединение. Позволяет сэкономить несколько байт памяти. В современном мире такое использование union имеет смысл только в Arduino и прочих IoT.

Куда больше пользы при использовании union в кране редких специальных случаях - когда например, получаемый / отправляемый по сети блок данных может иметь несколько разных форматов.

Использование union вне работы с железом, сетевыми протоколами и т. п. вещами - это большая редкость.

Если же тебе надо одновременно хранить и целое, и вещественное значение - это структура. И в подавляющем большинстве случаев используются именно структуры / классы.
Иван Коршунов
Иван Коршунов
66 587
Осмысленное использование union выглядит примерно так:
struct Variant {
enum { Int, Double, Pointer, Char } type; // тут будем хранить тип данных
union { // только одно поле union должно использоваться
// в зависимости от значения type
int intVal;
double doubleVal;
и другие поля union
} data; // данные тут
};

При программировании на C++ не надо создавать такие структуры данных, поскольку в стандартной библиотеке есть шаблонный класс для решения этой задачи – std::variant.
std::variant удобней и безопасней, чем простой union. union используется в реализации std::variant.
Максим Шахалиев Ещё есть похожий класс std::any