【发布时间】:2016-02-08 00:46:19
【问题描述】:
C++ 标准对泛左值的“动态类型”概念定义如下:
动态类型
由 glvalue 表达式表示的 glvalue 所指的最衍生对象 (1.8) 的类型 [示例:如果静态类型为“指向 B 类的指针”的指针 (8.3.1) p 指向从 B 派生的 D 类对象(第 10 条),表达式 *p 的动态类型是“D”。参考文献(8.3.2)的处理方式类似。 ——结束示例]
如果泛左值所指的不是最派生的对象,如何解释这个定义?这是否意味着“最派生对象的类型包含由glvalue表达式表示的glvalue所指的对象”?
另一个难题是关于 C++ 标准 5.7 中的第 4 段:
...如果指针操作数指向数组对象的元素,...
我想问如果指针操作数指向数组对象的一个元素的子对象,这个条件是否成立。举个例子,如果它不成立,那么下面代码中的行为是未定义的,对吧?
D d[10];
B *p = d; //B is a base class of D
p += 2; //undefined behavior?
【问题讨论】:
-
每个帖子一个问题。
-
不仅仅是“包含”,而是“包含作为基类子对象”。
标签: c++ pointers iso dynamictype subobject