繁体   English   中英

如何在C ++中实现static_cast?

[英]How is static_cast implemented in c++?

static_cast如何运作? 如果您正在做类似...

如果D通过某个未指定的层次结构(不一定直接)从B继承,则您执行以下操作:

B* b = new D();
D* d = static_cast<D*>(b);

怎么了? 它是否只是在编译时计算偏移量并将该偏移量应用于指针? 还是在运行时发生某些事情以进行转换?

怎么了?

编译器假定您知道自己在做什么,因此指针确实确实指向了D对象,并相应地更改了指针类型,并在必要时调整了值以指向完整的D对象而不是B子对象。 。

如果弄错了,并使用了一个D*指针,该指针实际上并没有指向D对象,那么您将获得未定义的行为。 所以要小心

它是否只是在编译时计算偏移量并将该偏移量应用于指针?

是。

还是在运行时发生某些事情以进行转换?

没有; “静态”表示仅使用编译时信息。 必要时,唯一的运行时活动是添加固定偏移量。

如果要运行时检查转换是否有效(只要类型是多态的),请使用dynamic_cast 如果那里没有真正的D对象,它将提供一个空指针(或者,如果您要投射引用而不是指针,则抛出bad_cast异常)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM