Я возился с кодом, как следующее:C++ Союзов в памяти
union Data {
int i;
double x;
std::string str;
~Data(){}
};
union Data var = {.x = 31293.932};
std::cout << var.x << "\n";
std::cout << var.str << "\n";
std::cout << var.i << "\n";
Насколько я знаю, союза есть некоторые 64 бит, что написано после того, как я установил й элемент к некоторому числу с плавающей точкой. Затем я хочу увидеть соответствующую строку, считая, что я обрабатывал эти байты как char. Но я получаю ошибку сегментации, когда пытаюсь напечатать ее как строку. Почему это? Я инициализировал объединение, поэтому я предполагаю, что var.str также должен быть инициализирован.
В принципе, бросая кучу байтов в слот памяти и надеясь, что вы можете обрабатывать эти байты как действительный объект 'std :: string', является рецептом для катастрофы. –
Вы ожидаете, что включение членов в объединение магически позволяет им конвертировать из любого типа данных в любой другой тип данных, и это не так, как все работает. –