[英]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.