Мое понимание объединения - все его значения выделяются по одному и тому же адресу памяти, а объем памяти равен наибольшему члену союза. Но я не понимаю, как мы будем их использовать. Это код, в котором использование соединения предпочтительнее в соответствии с The C++ Programming Language.Правильное использование союза
enum Type { str, num };
struct Entry {
char* name;
Type t;
char* s; // use s if t==str
int i; // use i if t==num
};
void f(Entry* p)
{
if (p->t == str)
cout << p->s;
// ...
}
После этого Бьерн говорит:
Члены s и я никогда не могут быть использованы в то же время, так что пространство впустую. Его можно легко восстановить, указав, что оба должны быть членами объединения, например: union Значение { char * s; int i; }; язык не отслеживать, какой вид стоимости проводится объединением, поэтому программист должен сделать это: структура ввода { обугленного * имя; Тип t; Значение v; // используем v.s, если t == str; используйте v.i, если t == num }; void f (Entry * p) { if (p-> t == str) 10 cout v.s; // ...}
Может кто-нибудь объяснить полученный код накидной дальше? что на самом деле произойдет, если мы превратим это в союз?
Союзов часто используется в сети при определении пакетов –