您的位置:首页 > 其它

指针和对象存取数据成员有什么区别?

2016-03-24 13:24 288 查看
  如果我们有两个定义:

Point3d origin,*pt = &origin;


  用它们来存取data member,像这样:

origin.x = 0.0;
pt->x = 0.0


  通过origin存取,和通过pt存取,有什么重大差异么?

  当Point3d是一个derived class,而其继承结构中有一个virtual base class,并且被存取的member(如本例中的x)是一个从该virtual base class继承而来的member时,就会有重大区别。

  我们不知道编译时期这个member真正的offset位置,也就是说我们不直到pt必然指向哪一种class type,所以这个存取操作必须延迟至执行期,经由一个额外的间接导引,才能解决;但如果用origin,就不会有这些问题,其类型无疑是Point3d class,而即使它继承自virtual base class,members的offset位置也在编译时期就固定了。一个积极进取的编译器甚至可以静态地经由origin就解决掉对x的存取。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  存取数据成员