是否有一种快速(和不安全)的方式来向下转换指针而不检查?



我想将基类指针向下转换为派生类指针。

我知道动态强制转换是昂贵的,所以我想避免它。在我的例子中,我完全知道所讨论的指针所指向的实际类。是否有一种比动态铸造更快的方法来向下铸造它?

我试图使用static_cast,但它不会适用于这里,因为有虚拟继承在我的类层次。

更新:

谢谢你的评论,我现在意识到那些动态强制转换不太可能成为整个程序的瓶颈,所以试图优化它几乎是浪费时间。

似乎这正是虚方法的作用。适当使用虚方法可以消除对动态强制转换的大部分需求。它甚至可以用于虚拟继承。

#include <stdexcept>
#include <iostream>
class Derived;
class Base {
public:
virtual Derived *to_derived()
{
throw std::runtime_error("Nope");
}
};
class Derived : virtual public Base {
public:
Derived *to_derived() override
{
return this;
}
};
class DerivedAgain : public Derived
{
};
int main()
{
DerivedAgain kit_and_kaboodle;
Base *p=&kit_and_kaboodle;

std::cout << (p->to_derived() ? "it worksn":"no it doesn'tn");
return 0;
}

如果需要,为const正确性添加一个const重载。

reinterpret_cast<>是在没有任何动态检查的情况下将下降的基本问题的答案。这是c型类型中最强(即最不安全)的类型。

最新更新