在构造对象后,我将NumericType Values (10, 3.1416, 20)
的值设为20, 3.1416, 20
。是union
定义的构造函数的行为吗?
union NumericType
{
NumericType() {}
NumericType(int i, double d, long l)
{
iValue = i;
dValue = d;
lValue = l;
}
private:
long lValue;
int iValue;
double dValue;
};
int main()
{
union NumericType Values ( 10, 3.1416, 20 );
}
答案 0 :(得分:2)
你正在做的事情没有意义。因为它是一个联合,你将分配给相同的内存区域3次。因为您在构造函数 last 中分配给lvalue
,所以这就是所有内容。所有三个变量都在同一个位置并占用相同的内存(dValue
除外,它占用的字节数比其他两个多4个。)
您可能想要一个struct
,而不是union
(因为在struct
中,所有变量都是分开的,将一个变量设置为某个变量不会影响其他变量。)
Here's a good visualization(请记住,这个块只有一个8字节的内存块,而不是3块):
答案 1 :(得分:1)
请记住,union中的元素共享内存,因此拥有一个初始化所有元素的构造函数会丢弃信息。
那就是说,这不是有效的C ++。