繁体   English   中英

类中静态成员的地址

[英]Address of static member in a Class

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

#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

如果您将其更改为公共静态成员(因此您可以通过名称访问它),那么您可以使用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 );

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM