问题描述
来自[defns.dynamic.type]:
动态类型
glvalue所引用的最派生对象[intro.object]的类型
[示例:如果静态类型为“指向类B的指针”的指针[dcl.ptr]p
指向从B派生的D类对象[class.derived] ,表达式*p
的动态类型为“ D”。参考文献[dcl.ref]的处理类似。 — 示例]
请考虑以下内容(基于上面给出的示例):
class B {};
class D: public B {} d;
B *p = &d; // dynamic type of `*p`?
根据示例的意图,*p
的动态类型将为“ D
”。但是,[dcl.init]规定,初始化程序prvalue &d
在变为B
的初始值之前,将被转换(通过标准指针转换)为“指向p
的指针”。对于[conv.ptr],该值将是“指向派生类对象的基类子对象的指针”(即B
的{{1}}子对象)。然后,对于每个[expr.unary.op],d
将是一个左值,它引用*p
子对象,而不是最派生的对象,不用管B
。那么它的动态类型是什么?此外,d
在没有p
的情况下实际上如何指向d
?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)