static_cast
10,000 项指针类型需要多少?
最佳答案
吹毛求疵的角落
其他答案指出指针的成本为零;就涉及单继承的类层次结构而言,这是正确的,但在处理多重继承时,可能会有(非常小的)成本。
在单继承类中,对象的内存布局通常是这样安排的,即指向派生类的指针可以用作指向基类的指针而无需调整——这通常是通过将对象放在前面,因此指向 Derived 的指针实际上也是指向 Base 的有效指针。
但是在多重继承的场景下,不能将所有的基类放在对象的前面;因此,当将 Derived *
转换为 Base1 *
或 Base2 *
时,可能需要调整指针。在执行涉及指向基类之一的指针的各种操作时,这通常会导致指针的固定大小递增。
当然,这完全可以忽略不计(最多相当于一条非常快的汇编指令),但是尽管如此,在这种情况下是 非常非常小的 Actor 成本。请注意,虽然它不是特定于 static_cast
,但只要您需要将 Derived *
视为 Base2 *
(包括您只需调用Base2 *
方法,因为 this
指针也需要调整)。
补充阅读:http://www.codeproject.com/Articles/12935/What-static_cast-is-actually-doing
关于c++ - static_cast 指针类型的性能影响?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20207491/