C/C++
Здравствуйте, структура и объединение в c++
Я знаю что в с++ ,есть структуры (struct) и объединение (union). Мне не понятно только чем они отличаются. Я знаю что union хранит значения в одной памяти, но и еще что переменная именно в момент времени записывается. Можете пожалуйста на простых примерах объяснить их отличия и когда лучше использовать структуру а когда объединение. Заранее спасибо, буду очень благодарен
"union хранит значения в одной памяти" - в этом и различие.
"переменная именно в момент времени записывается" - первый раз об этом слышу.
"переменная именно в момент времени записывается" - первый раз об этом слышу.
Например, тебе надо хранить либо целое, либо вещественное значение, но никогда не требуется одновременно хранить и целое, и вещественное значение - это объединение. Позволяет сэкономить несколько байт памяти. В современном мире такое использование union имеет смысл только в Arduino и прочих IoT.
Куда больше пользы при использовании union в кране редких специальных случаях - когда например, получаемый / отправляемый по сети блок данных может иметь несколько разных форматов.
Использование union вне работы с железом, сетевыми протоколами и т. п. вещами - это большая редкость.
Если же тебе надо одновременно хранить и целое, и вещественное значение - это структура. И в подавляющем большинстве случаев используются именно структуры / классы.
Куда больше пользы при использовании union в кране редких специальных случаях - когда например, получаемый / отправляемый по сети блок данных может иметь несколько разных форматов.
Использование union вне работы с железом, сетевыми протоколами и т. п. вещами - это большая редкость.
Если же тебе надо одновременно хранить и целое, и вещественное значение - это структура. И в подавляющем большинстве случаев используются именно структуры / классы.
Осмысленное использование 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.
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
Похожие вопросы
- Как правильно запихнуть в поле структуры саму структуру? C++
- Программа на c++ не работает. Написать структуру и прочее. Подскажите, пожалуйста, что я делаю не так.
- [C++] Помогите написать задачу на структуры!
- C/C++ Как устроена память, выделенная для структуры с указателем *next?
- Как решить ошибку C2079 использует не имеющую определения структуру class C++
- Функция заполняющая структуру, C++
- Сложности с массивами структур c++
- Шаблон структур C++
- [C++] Задача на структуры
- C++ | Структуры и массивы структур. Помогите пожалуйста!