关于glvalues的“动态类型”的定义

问题描述

来自[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 (将#修改为@)

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...