dan*_*dan 2 c++ casting static-cast
static_cast工作怎么样?如果你做的事......
如果D通过某些未指定的层次结构(不一定是直接)从B继承,并且您执行以下操作:
B* b = new D();
D* d = static_cast<D*>(b);
Run Code Online (Sandbox Code Playgroud)
怎么了?它只是在编译时计算偏移量并将该偏移量应用于指针吗?或者是否有一些事情在运行时发生以进行演员表?
怎么了?
编译器假定您知道自己在做什么,以便指针确实指向D对象,并相应地更改指针类型,如果需要调整值以指向完整D对象而不是B子对象.
如果你弄错了,并使用一个D*并不真正指向一个D对象的指针,那么你将得到未定义的行为; 所以要小心.
它只是在编译时计算偏移量并将该偏移量应用于指针吗?
是.
或者是否有一些事情在运行时发生以进行演员表?
没有; "static"表示它仅使用编译时信息.唯一的运行时活动是在必要时添加固定偏移量.
使用dynamic_cast,如果你想有一个运行时检查,转换是有效的(只要类型是多态).bad_cast如果没有真正的D对象,它将给出一个空指针(如果你正在转换引用而不是指针则抛出异常).