PHP、Java、Python、C、C++这几种编程语言各有什么优点或特点?(5)C++编译指南和虚拟机制?首先,C++的编译准则希望达到和C一样的效率。希望:-a)没有运行时调用间接。任何数据都在运行时通过地址直接访问。-b)没有运行时的元数据。无需通过元数据访问复杂的类层次结构。——c)C中所有的数据都希望用struct来实现,即对象及其成员的地址是在编译时确定的。以上在过程范式和ADT范式中都是正确的。但是,在面向对象的范式中,却渴望实现:需要保持同一个继承体系的成员结构的一致性。只有这样才能保证运行时的多态性。即你想通过同一个入口访问父类或子类的相同数据成员和函数成员,而不管具体对象是父类还是子类。C++的虚机制是如何实现的?a)虚拟功能i.Virtualfunctions,在运行时,每一个有虚函数的类型(甚至是子类)都维护着一个虚函数表,这个表在运行时已经是Meta-Data,通过查表就可以找到对象自己的虚函数。二.比如clone必须是object.__vptr__Base->#3(),不管具体是什么对象。b)多重继承——继承基类如何处理?编译器判断指针类型并加上相应的偏移量。c)虚拟继承——添加一个虚拟基类指针,指向共享部分。这样做有两个缺点:虚基类的子类必须承载一个指向共享部分的基类指针。如果继承多个虚基类,则需要多个这样的指针。(微软的解决方案是增加一个虚基类表,类似于虚函数表。)虚继承链的增加会导致间接访问层次的增加。例如两个菱形继承的串联。推荐观看:笨方法学Python!编程新手第一本Python入门书!注意!
