如何解决关于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 举报,一经查实,本站将立刻删除。