【发布时间】:2014-12-17 06:52:05
【问题描述】:
我对联合的理解是它的所有值都分配在同一个内存地址中,并且内存空间与联合中最大的成员一样大。但我不明白我们将如何实际使用它们。 根据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;
// ...
}
在此之后 Bjarne 说:
成员 s 和 i 永远不能同时使用,因此浪费空间。通过指定两者都应该是联合的成员,可以很容易地恢复它,如下所示: 联合价值{ 字符* s; 诠释我; }; 该语言不跟踪联合持有哪种值,因此程序员必须这样做: 结构入口{ 字符*名称; 类型 t; 价值 v; // 如果 t==str 则使用 v.s;如果 t==num 使用 v.i }; 无效 f(条目* p) { 如果 (p->t == str) cout vs. // ... }
谁能进一步解释生成的联合代码?如果我们把它变成一个联合,实际会发生什么?
【问题讨论】:
-
网络中定义数据包时经常使用联合