读者对象
就像书中导读所说,读者对象不是面向新手的教程,而是写给有一定C++
基础的人看的。
C++
老手分为两类:一种是把语言用的烂熟,OO
观念也有;另一种人不但如此,还对于台下的机制,如编译器合成的default
, constructor
, object
的内存布局等有莫大的兴趣。
对于第二种人,探索对象模型的乐趣不言而喻。至于第一类人,了解C++
对象模型,绝对有助于你在语言及面向对象观念两方面的层次提升。
你需要细细推敲每一个句子,每一个例子,囫囵吞枣是完全没用的。
作者Lippman
是C++
大师级人物,并且参与了第一套C++编译器的开发,他的解说鞭辟入里。
在研读完大师的讲解之后,我也尝试以一种更加清晰易懂的方式将其写出来讲出来,再结合不同IDE做一些测试,希望能帮到更多的人理解C++
对象模型。
对象模型
有两个概念可以解释C++
对象模型
1. 语言中直接支持面向对象程序设计的部分
2. 对于各种支持的底层实现机制
语言层面的支持,在大多数的C++
介绍中都能找到,至于第二个概念就是lippman
的inside the c++ object model
中所介绍的。
C++
对象模型的第一概念是一种“不变量”。例如,C++ class
的virtual function
在编译时期就固定下来了,程序员没有办法在执行期动态的添加或取代其中的某一个。这使得virtual
操作调用得以快速的dispatch (指派)
结果,付出的成本则是执行期的弹性。
对象模型的底层实现机制,在语言层面是看不出来的,而且C++标准对于编译器如何实现,在某些方面上是没有约束的。所以大多数决定都是编译器自己做取舍。
比如 virtual function call
,一般而言都是通过一个表格(内含virtual function
的地址,通常称之为虚函数表)的索引而决议的。
但是一定要通过表格实现?当然并不是必须的,编译器完全可以自己引进其他变通做法。不过目前几乎所有编译器的实现都是基于虚函数表的,并且在程序执行前就已经构造完毕。
那么既然对于C++
的底层实现机制并未标准化,那么何必要探讨它呢?
主要的理由是,如果一个程序员了解底层实现模型,便能写出效率较高的代码,当然仁者见仁智者见智,探索对象模型带来的好处每个人都有不同的感悟,但是我相信你一定不会后悔。
因此,我要大声的说:“有经验的C++ programmer 都应该看一下对象模型”