摘要:
考察以下代码:void Twiddle1(int *xp, int *yp){ *xp += *yp; *xp += *yp;}void Twiddle2(int *xp, *yp){ *xp += 2 * *yp;}这两个过程等价吗? 事实上 Twiddle2 的效率更高, 因为... 阅读全文
摘要:
下面是 Point class 的一个加法运算符的可能实现内容:class Point{ friend Point opsrator+(const Point&, const Point&);};Pointopsrator+(const Point &lhs, const Poi... 阅读全文
摘要:
nonmember friend 或 nonstatic member 或 static member 函数都会被转化为相同的形式, 因此三者的效率完全相同.另外, inline member function 的效率一直是最高的(前提是简单操作), 优化后的效率更是高, 这是因为编译器会将被视为不... 阅读全文
摘要:
考虑下面的 virtual base class 派生体系:class Point2d{public: Point2d(float = 0.0, float = 0.0); virtual ~Point2d(); virtual void Mumble(); virtual ... 阅读全文
摘要:
在多重继承中支持 virtual function, 其复杂度围绕在第二个及后继的 base classes 上, 以及必须在执行期调整 this 指针这一点, 以以下的 class 体系为例:class Base1{public: Base1(); virtual ~Base1(); ... 阅读全文
摘要:
看过之前的 virtual function可以知道其实现模型: 每一个 class 有一个 virtual table. 内含该 class 之中 有作用的 virtual function 地址, 然后每个 object 有一个 vptr, 指向 virtual table 的所在. 在这一节中... 阅读全文
摘要:
如果一个 normalize() 是一个 virtual member function, 那么以下的调用:ptr->normalize();将会被内部转化为:(*ptr->vptr[1])(ptr);其中:vptr 表示由编译器生成的指针, 指向 virtual table, 它被安插在每一个声明... 阅读全文
摘要:
先说一个事情, mangle 的意思是 vt.乱砍, 损坏; n. 碾压机。 这意味着 name mangling 就是要先把你精心想出的名字们碾碎, 再拼成独一无二的样子, 当然这么残忍的事情都是编译器瞒着你做的。一般而言, member 的名称前会被加上 class 名称, 形成独一无二的命名,... 阅读全文
摘要:
C++ 的设计准则之一就是: nonstatic member function 至少必须和一般的 nonmember function 有相同的效率。 这就是说, 如果我们在以下两个函数之间做选择:float magnitude3d(const Point3d *_this){...}float ... 阅读全文
摘要:
指向 data member 的指针是一个颇有用处的语言特性, 特别是如果你需要详细调查 class members 的底层布局的话。这个调查可以帮助你决定 vptr 是放在尾端还是起始处。 另一个用途是可以用来决定 clas 中 access sections 的次序。考察以下代码, 其中有一个 ... 阅读全文