dynamic_cast 与 static_cast 的区别在哪里????

hba 2003-01-03 07:02:13
dynamic_cast 与 static_cast 的区别在哪里????

天啊,我程序Debug版可用,Release不可用...这个因原我跟了一下午啊....原来是dynamic_cast<CMessage*> pMsg; 这个的Release版等于NULL...我改成static_cast<CMessage*> pMsg; 就没问题了...气死我了,现在用的是 "弓虽" 行转换,上面两个不敢用了,怕哪天又出什么鬼问题...
...全文
25 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
caslwzgks 2003-01-03
  • 打赏
  • 举报
回复
动态强制把测试与强制转换结合到一起,即先进行类型检查(运行时类型检查),如果能转换就转换否则返回空指针。也就是说,在你不知道(或无法确定)指针所指对象具体类型时,可以使用dynamic_cast进行强制转换。
static_case用于基类到派生类的转换,且不作类型检查如:
class CBase
{};
clase CDriver :public CBase
{};

void f(CBase * pB)
{
// CDriver * pD = (CDriver *)pB;
CDriver * pD = static_cast<CDriver*>(pB);

....
}
void main()
{
CBase * pBase = new CDriver;
//call f
f(pBase);

}

chinajiji 2003-01-03
  • 打赏
  • 举报
回复
dynamic_cast<CMessage*> pMsg;
这里你想把指针pMsg转换成指向CMessage类的指针,当pMsg指向的对象的实际类型是CMessage时转换才会成功,如果不是,则返回NULL指针.
在release 版返回了NULL,说明类型转换有问题,出现问题是好事,说明你的程序中有可能有错误.
张友邦 2003-01-03
  • 打赏
  • 举报
回复
dynamic_cast用来upcast,其他时候用static_cast。我的理解
flyycyu 2003-01-03
  • 打赏
  • 举报
回复
一个是运行时,一个编译时

69,373

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧