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;
}
x
和y
之间的间隙上纠结,即使A
没有数据成员,即使A::f
为空,这仍然是未定义行为。你不能断言“所有编译器都返回4,即y的偏移量”。 - MSalters