爱技术 & 爱分享
爱蛋蛋 & 爱生活

深度探索C++对象模型前言

读者对象

就像书中导读所说,读者对象不是面向新手的教程,而是写给有一定C++基础的人看的。

C++老手分为两类:一种是把语言用的烂熟,OO观念也有;另一种人不但如此,还对于台下的机制,如编译器合成的defaultconstructorobject 的内存布局等有莫大的兴趣。

对于第二种人,探索对象模型的乐趣不言而喻。至于第一类人,了解C++对象模型,绝对有助于你在语言及面向对象观念两方面的层次提升。

你需要细细推敲每一个句子,每一个例子,囫囵吞枣是完全没用的。

作者LippmanC++大师级人物,并且参与了第一套C++编译器的开发,他的解说鞭辟入里。

在研读完大师的讲解之后,我也尝试以一种更加清晰易懂的方式将其写出来讲出来,再结合不同IDE做一些测试,希望能帮到更多的人理解C++对象模型。

对象模型

有两个概念可以解释C++对象模型
1. 语言中直接支持面向对象程序设计的部分
2. 对于各种支持的底层实现机制

语言层面的支持,在大多数的C++介绍中都能找到,至于第二个概念就是lippmaninside the c++ object model中所介绍的。

C++对象模型的第一概念是一种“不变量”。例如,C++ classvirtual function在编译时期就固定下来了,程序员没有办法在执行期动态的添加或取代其中的某一个。这使得virtual操作调用得以快速的dispatch (指派)结果,付出的成本则是执行期的弹性。

对象模型的底层实现机制,在语言层面是看不出来的,而且C++标准对于编译器如何实现,在某些方面上是没有约束的。所以大多数决定都是编译器自己做取舍。

比如 virtual function call,一般而言都是通过一个表格(内含virtual function的地址,通常称之为虚函数表)的索引而决议的。

但是一定要通过表格实现?当然并不是必须的,编译器完全可以自己引进其他变通做法。不过目前几乎所有编译器的实现都是基于虚函数表的,并且在程序执行前就已经构造完毕。

那么既然对于C++的底层实现机制并未标准化,那么何必要探讨它呢?

主要的理由是,如果一个程序员了解底层实现模型,便能写出效率较高的代码,当然仁者见仁智者见智,探索对象模型带来的好处每个人都有不同的感悟,但是我相信你一定不会后悔。

因此,我要大声的说:“有经验的C++ programmer 都应该看一下对象模型”

赞(0) 传送门
本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。编程日志 » 深度探索C++对象模型前言
分享到: 更多 (0)

游戏 && 后端

传送门传送门