C++ 17标准是否保证联合的地址与其成员的地址相同?

Bro*_*her 8 c++ allocator

我目前正致力于编写池分配器.我的问题归结为以下代码:

template <typename T>
union myUnion {
    T data;
    myUnion<T>* nextUnion;
};

void someFunction(){
    myUnion<T> mu;
    T* t = new (std::addressof(mu.data)) T();
    //some code
    myUnion<T>* mu2 = reinterpret_cast<myUnion<T>*>(t);
}
Run Code Online (Sandbox Code Playgroud)

mu的地址是否与mu2相同?

小智 18

是.

9.2/19(N4659中的12.2/24):

如果标准布局类对象具有任何非静态数据成员,则其地址与其第一个非静态数据成员的地址相同.

如果联合本身是标准布局,那么联合的地址与其成员的地址相同.

由于9.5/1(N4659为12.3/2),成员的地址完全相同:

每个非静态数据成员都被分配,就好像它是结构的唯一成员一样.union对象的所有非静态数据成员都具有相同的地址.

  • @BoundaryImposition:如果你给我200瑞士法郎,我会的.也就是说,它没用:N4140的内容与实际标准相同. (8认同)