c++ - 在类中使用 union

标签 c++ class unions

我看到一些代码如下:

class A 
{
private:
    union {
        B *rep;
        A *next;
    }; // no variables of this anonymous defined!

    void func()
    {
        A *p = new A;

        p->next = NULL; // why p has a member variable of 'next'?
    }
};

我已经用VS2010编译了上面的代码,没有任何错误。 问题来了,

为什么 p 有成员变量 'next'?

    union {
        B *rep;
        A *next;
    };

据我所知,这是一个匿名 union ,甚至没有定义变量。我们怎样才能像那样访问这个 union 内部的成员变量?

最佳答案

因为这几乎就是匿名 union 所做的,它在封闭的命名空间中定义了零个或多个变量(在类声明中使它们成为字段名称),这些变量占用重叠的内存。因此在使用中它就像你声明的一样

class A 
{
private:
    B *rep;
    A *next;

    void func()
    {
        A *p = new A;

        p->next = NULL;
    }
};

...除了 rep 和 next 占用重叠空间(或者假设两个指针将具有相同的大小,相同的空间),因此命名 union 带来的所有危险和好处。

关于c++ - 在类中使用 union ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5453170/

相关文章:

c++ - 确定两个目录之间的相对位置

java - 类加载应用程序上下文 Spring

python - 将函数返回分配为另一个函数参数

c - C 变量中需要的垃圾值

c++ - std::optional 实现为 union vs char[]/aligned_storage

c++ - 拆分文本和背景作为 OCR (Tesseract) 的预处理

c++ - 将现有的 QTcpSocket 变形为 QSslSocket

c++ - 添加 #include <boost/asio.hpp> 导致 "has different size"问题

c++ - c++中的初学者预期的类名错误

c++ - 在类内的 union 内访问 map 会出现段错误