gpt4 book ai didi

c++ - NULL 指针与 static_cast 的兼容性

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:54:46 30 4
gpt4 key购买 nike

Q1。为什么在 static_cast 中使用 NULL 指针会导致崩溃,而 dynamic_castreinterpret_cast 会返回 NULL 指针?

问题发生在类似于下面给出的方法中:

void A::SetEntity(B* pEntity, int iMyEntityType)
{
switch (iMyEntityType)
{
case ENTITY1:
{
Set1(static_cast<C*>(pEntity));
return;
}
case ENTITY2:
{
Set2(static_cast<D*>(pEntity));
return;
}
case ENTITY3:
{
Set3(static_cast<E*>(pEntity));
return;
}
}
}

Inheritance:
class X: public B
class Y: public B
class Z: public B

class C: public X, public M
class D: public Y, public M
class E: public Z, public M

Q2。从 B 到 C/D/E 的 static_casting 是否有效? (这工作正常,直到输入变为 NULL)

我正在使用 gcc 3.4.3 版

最佳答案

你可以static_cast一个空指针——它会给你一个空指针。

在您的代码段中,问题很可能是您将不一致的 pEntityiMyEntityType 值传递给函数。因此,当 static_cast 完成时,它会盲目地转换为错误的类型(与实际对象不同的类型),并且您会得到一个无效的指针,该指针稍后会向下传递到调用堆栈并导致未定义的行为(崩溃)该程序)。 dynamic_cast 在相同的情况下看到对象确实不是预期的类型并返回空指针。

关于c++ - NULL 指针与 static_cast 的兼容性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1872571/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com