Class 中静态成员的地址

Address of static member in a Class

如何在 C++ 中获取 class 的私有静态成员的内存地址。 在下面的代码中,我直接通过内存地址访问 class 的私有成员。

#include <iostream>

class directM {
    int a;
    int b;
public:
    directM(int aa , int bb){
        a = aa;
        b = bb;
    }
    void show(){
        std::cout << a << b << std::endl;
    }
};

int main(){
    directM dm(10,20);
    dm.show();
    *(int*)( &dm ) = 15;
    *(int*)( ( (int*)(&dm) ) + 1 ) = 25;
    dm.show();
    return 0;
}

现在,如果我更改其中一个成员并将其设为静态,即

static int b;

现在我怎样才能通过地址直接访问这个私有成员。

注意:- 我知道这是一种非常不明智的访问数据的方式,我不会用它来解决任何问题。这只是一个学习练习,可以更好地了解这门语言。

静态成员变量不是对象的一部分,它们的存储是完全独立的。如果不访问变量名称,无法知道它们的位置。

理想情况下,您不应该这样做,并且该语言旨在使其变得困难,因为它被标记为 private

如果您将其更改为 public 静态成员(以便您可以通过名称访问它),那么您可以这样使用 address-of 运算符:

class directM { public: static int b; }

int* staticMember = &directM::b;

C++ 不保证内存中的布局或静态成员的组织,因此此代码不安全:

class directM {
public:
    static int first;
    static int second;
}

int* firstAddr = &directM::first;
int* secondAddr = firstAddr++;
assert( secondAddr == &directM::second );