我再次问这个问题,因为像这样的唯一其他问题已经接近 10 年了,并且包含有关涉及基类子对象的表达式的错误信息:
[defns.dynamic.type]将 glvalue的动态类型定义为:
泛左值所指的最衍生对象的类型
一个glvalue最多只能指一个对象,并且由于[intro.object] p6定义的“大多数派生对象”本质上是:
类类型的完整对象、数据成员或数组元素,或非类类型的对象称为最派生对象。
如果glvalue 没有引用一个最派生的对象,那么动态类型会是未定义的吗?
另外,我知道表达式的动态类型的预期效果是:对于E
引用类型对象的泛左值表达式,它是类型B
对象的基类子对象D
,其中B
是 的基类D
,以获取类型但是D
,E
我看不到当前的措辞如何实现,甚至不需要,因为绑定到派生类类型的基类类型的引用/指针将始终引用基类子对象。据我所知,表达式的类型和它所引用的对象的类型永远不会发生。