C++ 常量/非常量对象指针的并集

C++ 常量/非常量对象指针的并集,c++,constants,C++,Constants,考虑下面的示例代码: class A { public: A() : n(0) {} int n; }; class B { public: B(A* a) : mA(a) { } B(const A* a) : mConstA(a) { } union { A* mA; const A* mConstA; }; }; int main() { A a; B b1(&a);

考虑下面的示例代码:

class A
{
public:

    A() : n(0) {}

    int n;
};

class B
{
public:

    B(A* a) : mA(a) { }
    B(const A* a) : mConstA(a) { }

    union {
        A* mA;
        const A* mConstA;
    };
};

int main()
{
    A a;
    B b1(&a);
    B b2(const_cast<const A*>(&a));

    return 0;
}
但是是否保证
b.mA
始终等于
b.mConstA

当你有常量和非常量成员的联合时,这些等式总是正确的吗

是的,两个指针将引用同一地址中的同一对象。内存中的位将是相同的

但b.mA是否保证始终等于b.mConstA


是的,它们的值是相同的,但这并不意味着您可以真正使用它。这相当于使用
const\u cast
,您将获得指向该对象的非常量指针,但如果该对象确实是
const
,则使用该指针修改该对象是未定义的行为。

请注意,这些不是常量/非常量变量,而是指向常量/非常量对象的非常量指针。@DavidRodríguez dribeas,你是对的。固定的。:)
int main()
{
    const A a;
    B b(&a);
    b.mA->n = 3; // Blasphemy!!!

    return 0;
}