构造对象后,我将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 );
}

最佳答案

你在做什么毫无意义。因为这是一个联合,所以您将分配给同一内存区域3次。因为您最后在构造函数中分配了lvalue,所以这就是所有内容。所有这三个变量都在同一位置并占用相同的内存(dValue除外,该字节比其他两个多占用4个字节)。

您可能需要struct,而不是union(因为在struct中,所有变量都是独立的,将一个变量设置为某些变量不会影响其他变量)。

Here's a good visualization(请注意,此块只是一个8字节的内存块,而不是3):

c++ -  union 中的构造函数导致未定义的行为?-LMLPHP
(来源:microsoft.com)

10-05 21:47