2013-04-24 2 views
0

Я часто определяют союзы внутри функций, как это:Как инициализировать переменную локального объединения?

union 
{ 
sometype A; 
othertype B; 
}name; 

, а затем обойдите их с помощью нравится:

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

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

+2

Почему вы используете союзы, когда вам нужны как 'name.A', так и' name.B'? –

ответ

1

От here,

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

Так что, как это:

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 :)

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

+0

здесь то, что он делает, это не UB, пока он не читает имя. После написания имени.B или наоборот –

Смежные вопросы