Dor*_*ugi 2 c++ memory-management
C++ 中的类成员是否保证是连续的?
我已经尝试与几乎所有流行的C ++编译器运行下面的代码,以及所有它们的产率的结果如图4所示,它是变量y的相对地址。这是巧合,还是语言规范保证是这种方式?编译器是否有可能不会使成员 x 和 y 与类基本地址相邻/彼此相邻?
请注意,此线程不回答此问题。
#include <iostream>
using namespace std;
class A {
public:
void f(){
cout << &(this->y) << endl;
}
int x, y;
};
int main(int argc, const char* argv[])
{
A *a = 0;
a->f();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
因为你的类不是多态类型,没有基类,并且所有的成员都是public,地址x是保证类的地址。
此外, 的地址y保证在的地址之后x,尽管它们之间可以有任意数量的填充。所以是的,你的结果是巧合。
如果您的类是多态的,即virtual在它或基类的某处有一个函数,或者成员是protected或private,那么所有的赌注都将关闭。
因此,在您的情况下,(void*)&(this->x)is (void*)this,并且 的地址this->y必须高于 的地址this->x。
最后,如果您需要类成员是连续的,并且可以通过指针算术相互访问,请使用
int x[2];
Run Code Online (Sandbox Code Playgroud)
而是作为会员。
| 归档时间: |
|
| 查看次数: |
816 次 |
| 最近记录: |