Как инициализировать локальную переменную объединения?

Я часто определяю союзы внутри функций следующим образом:

union
{
sometype A;
othertype B;
}name;

а затем обойти их, как:

name.A = smth;
name.B = smthelse;

и хотя он работает в режиме отладки, в режиме выпуска он сообщает, что объединение не инициализировано, а в некоторых местах, где члены объединения являются указателями, даже происходит сбой. Так как я могу их инициализировать? Достаточно просто добавить ‘=’ операторы? Разве это не должен иметь конструктор по умолчанию в любом случае?

0

Решение

От Вот,

Вы можете объявить и инициализировать объединение в одном и том же
присваивание выражения, заключенного в фигурные скобки. Выражение
оценивается и присваивается первое поле объединения.

Ну вот так:

union NumericType
{
int         iValue;
long        lValue;
double      dValue;
};

union NumericType Values = { 10 };   // iValue = 10

Но это чаще встречается (и многие скажут лучше) сделать

union NumericType val;  // declaration
val.dValue = 3.1415;    // use union as a double

Вы получаете ошибки, потому что вы, кажется, используете union как будто это struct 🙂

Пожалуйста, поправьте меня, если я ошибаюсь, но прочитайте Вот, например.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]