以下对于局部变量、局部数组、C struct 和C++ 封装的函数进行测试,下列是两种编译器列出的各种结果:
上述所显示的重点在于,如果把优化打开,“封装”就不会带来执行期的效率成本。使用inline存取函数亦然。
在下一个测试中,使用单一继承、虚拟继承(单层)和虚拟继承(双层)的测试结果:
class Point1d{...}; //维护x
class Point2d: public Point1d{...}; //维护y
class Point3d: public Point2d{...}; //维护z
“单层虚拟继承”是从Point1d中虚拟派生出Point2d;“双层虚拟继承”则又从Point2d虚拟派生出Point3d。
单一继承不会影响测试效率,因为member被连续存储在derived class object中,并且其offset在编译器就已经知道了。
虚拟继承下,两个编译器都没能够辨识出对”继承“而来的data member pt1d::_x的存取是通过一个非多态对象(因而不需要执行期的间接存取)进行的。两个编译器都会对pt1d::_x(及双层虚拟继承中的pt2d::_y)产生间接存取操作,虽然其在Point3d对象中的位置早在编译器就固定了。“间接性”压抑了“把所有运算都移往寄存器”的优化能力。但是间接性并不会影响非优化程序的执行效率。