首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何理解“动态类型:〈prvalue〉静态类型的prvalue表达式”

如何理解“动态类型:〈prvalue〉静态类型的prvalue表达式”
EN

Stack Overflow用户
提问于 2017-11-12 00:58:54
回答 2查看 149关注 0票数 2

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的问题:

  1. 3.9和3.10之间的关系是什么?
  2. 为什么强调prvalue?
  3. 它是否意味着prvalue的动态和静态类型总是相同的?
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-11-12 01:42:05

3.9和3.10之间的关系是什么?

它们都定义了“动态类型”。非正式地说,表达式的动态类型是包含表达式所表示的对象的完整对象的类型。

为什么强调prvalue?

也许为了清楚起见,他们决定分别解释“动态类型”对值和值的含义。哲学(在C++17之前)是,glvalue指的是一个对象或函数,而prvalue是一个对象的值,所以它们在本质上有点不同。

它是否意味着prvalue的动态和静态类型总是相同的?

是。虽然可以创建一个引用另一个对象的基类子对象的glvalue,但是prvalue并不引用任何东西,因此,它就是这样的。任何创建作为另一个对象的子对象的prvalue的尝试都只是创建子对象的一个副本,而该副本是一个完整的对象。

票数 6
EN

Stack Overflow用户

发布于 2017-11-12 01:52:54

3.9定义“glvalue的动态类型”,3.10定义“prvalue的动态类型”。

文档使用的格式有点不寻常。这两个部分应被视为没有重叠的单独定义。(所有表达式都是glvalue或prvalue,但不是同时都是)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47244441

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档