[英]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.