这一节内容比较少,主要是对比了多种数据存放形式的成员访问效率。数据的存放形式包含基本类型、数组、结构体、封装、继承和虚继承。
// 基本类型
float p_a_x, p_a_y, p_a_z;
float p_b_x, p_b_y, p_b_z;
// 数组
float[3] p_a, p_b;
// 聚合
struct Point{
float x, y, z;
};
//封装
class Point
{
float x, y, z;
public:
float &GetX(){return x;}
float &GetY(){return z;}
float &GetZ(){return y;}
};
class Point
{
float x, y, z;
public:
float GetX(){return x;}
float GetY(){return z;}
float GetZ(){return y;}
};
// 继承
class Point1d{
public:
float x;
};
class Point2d: public Point1d{
public:
float y;
};
class Point3d: public Point2d{
public:
float z;
};
// 虚继承
class Point1d{
public:
float x;
};
class Point2d: virtual Point1d{
public:
float y;
};
class Point3d: virtual Point2d{
public:
float z;
};
对于上多种将z, y, z组织起来的形式,如果在开启代码优化的情况下,除了虚继承,访问x, y, z的效率是一样的。如果不采用代码优化,基本类型、数组、结构体、继承的效率是一致的(随编译器不同会有点差别),在类中,返回引用的效率比返回值的效率高一点点。采用虚继承的效率最低,且会随着虚继承层级的增加,数据访问的效率越低。