本來是爲了看看C++對象模型中子對象賦值給一個父對象和父類型指針指向的域時,到底會不會切割,就打開codebloks寫了下面的代碼,編譯器選的是GNU。spa
1 #define DEBUG(X) std::cout<<#X"\t=\t"<<X<<std::endl; 2 3 class A 4 { 5 public: 6 int a; 7 A():a(1){} 8 }; 9 10 class B 11 { 12 public: 13 A oa; 14 int b; 15 B():b(2){} 16 }; 17 18 main() 19 { 20 B ob; 21 A oa;//=ob.oa; 22 int *p = 0; 23 p = (int *)&oa; 24 DEBUG(&ob); 25 DEBUG(&oa); 26 DEBUG(&p); 27 }
打印出來的局部變量的地址的排列,從大地址到小地址是:ob,p,oa, 把DEBUG(&p)去掉以後排列又恢復正常了(ob, pa, p)。而後程序放在Linux下用g++編譯,出來的結果也是正常的。指針
已在博問裏提問,怕忘記這件事就記載在博客裏。靜候大俠答覆~ code