N4687
3.9 defns.dynamic.type 动态类型 极值引用的最派生对象(4.5)的〈glvalue〉类型示例:如果静态类型为“指向B类的指针”的指针(11.3.1) p指向从B派生的D类对象(第13条),则表达式*p的动态类型为“D”。引用(11.3.2)被类似地对待。-最后一个例子 3.10 defns.dynamic.type.prvalue 动态类型 prvalue表达式的〈prvalue〉静态类型
3.9版动态型混凝土的大部分问题。但我还是不明白3.10的意思。
以下是优先选择的描述:
prvalue不能是多态的:它标识的对象的动态类型总是表达式的类型。
更新:
3.9告诉我动态类型意味着类型的确定必须在运行时延迟。
我有几个关于3.10的问题:
发布于 2017-11-12 01:42:05
3.9和3.10之间的关系是什么?
它们都定义了“动态类型”。非正式地说,表达式的动态类型是包含表达式所表示的对象的完整对象的类型。
为什么强调prvalue?
也许为了清楚起见,他们决定分别解释“动态类型”对值和值的含义。哲学(在C++17之前)是,glvalue指的是一个对象或函数,而prvalue是一个对象的值,所以它们在本质上有点不同。
它是否意味着prvalue的动态和静态类型总是相同的?
是。虽然可以创建一个引用另一个对象的基类子对象的glvalue,但是prvalue并不引用任何东西,因此,它就是这样的。任何创建作为另一个对象的子对象的prvalue的尝试都只是创建子对象的一个副本,而该副本是一个完整的对象。
发布于 2017-11-12 01:52:54
3.9定义“glvalue的动态类型”,3.10定义“prvalue的动态类型”。
文档使用的格式有点不寻常。这两个部分应被视为没有重叠的单独定义。(所有表达式都是glvalue或prvalue,但不是同时都是)。
https://stackoverflow.com/questions/47244441
复制相似问题