了解C ++中的static_cast

时间:2019-06-16 17:45:30

标签: c++

我试图了解static_cast的工作方式。我有以下代码:

Projcet::ProjcetType result =
            static_cast<Projcet*>(DS)->removeProjcet(ID);

docs中,我了解到它用于创建临时对象。 如果没有static_cast,以下命令应如何显示?我觉得这会让我更好地了解它的作用。

编辑:

忘了提及:void *DSProjcet是一门课程。

1 个答案:

答案 0 :(得分:0)

我猜想DS来自一些旧的Windows库,它们返回了void*。可能是用C编写的。因此,您将获得此void指针,并希望将其用作Projcet引用。您的编译器除了是指针之外,对DS一无所知。因此,它不能将其视为Projcet的对象指针。

因此,通过使用static_cast,您可以告诉编译器要将DS用作指向Projcet对象的指针。现在,编译器可以连接到成员removeProjcet()的成员。

static_cast的缺点是,如果您实际上没有指向Projcet的指针,则程序很可能崩溃。更糟糕的是,继续未定义的行为。