我试图了解static_cast
的工作方式。我有以下代码:
Projcet::ProjcetType result =
static_cast<Projcet*>(DS)->removeProjcet(ID);
从docs中,我了解到它用于创建临时对象。
如果没有static_cast
,以下命令应如何显示?我觉得这会让我更好地了解它的作用。
编辑:
忘了提及:void *DS
和Projcet
是一门课程。
答案 0 :(得分:0)
我猜想DS
来自一些旧的Windows库,它们返回了void*
。可能是用C编写的。因此,您将获得此void指针,并希望将其用作Projcet
引用。您的编译器除了是指针之外,对DS
一无所知。因此,它不能将其视为Projcet
的对象指针。
因此,通过使用static_cast
,您可以告诉编译器要将DS
用作指向Projcet
对象的指针。现在,编译器可以连接到成员removeProjcet()
的成员。
static_cast
的缺点是,如果您实际上没有指向Projcet
的指针,则程序很可能崩溃。更糟糕的是,继续未定义的行为。