- cplusplus/
- C++ 如何理解;动态类型:〈;prvalue〉;prvalue表达式的静态类型"&引用;
C++ 如何理解;动态类型:〈;prvalue〉;prvalue表达式的静态类型"&引用;
C++ 如何理解;动态类型:〈;prvalue〉;prvalue表达式的静态类型"&引用;,c++,C++,[N4687]
3.9[定义动态类型]
动态类型
〈glvalue〉 glvalue引用的最派生对象(4.5)的类型
[示例:如果静态类型为“指向类B的指针”的指针(11.3.1)p指向类D的对象,
源自B(第13条),表达式*p的动态类型为“D”。参考文件(11.3.2)被视为
类似地。-结束示例]
3.10[定义动态类型prvalue]
动态类型
〈prvalue〉 prvalue表达式的静态类型
关于动力型混凝土的大多数问题见3.9。
但我还是不明白3.10的意思
以下是您的描述:
prv
[N4687]
3.9[定义动态类型]
动态类型
〈glvalue〉 glvalue引用的最派生对象(4.5)的类型
[示例:如果静态类型为“指向类B的指针”的指针(11.3.1)p指向类D的对象,
源自B(第13条),表达式*p的动态类型为“D”。参考文件(11.3.2)被视为
类似地。-结束示例]
3.10[定义动态类型prvalue]
动态类型
〈prvalue〉 prvalue表达式的静态类型
关于动力型混凝土的大多数问题见3.9。
但我还是不明白3.10的意思
以下是您的描述:
prvalue不能是多态的:它标识的对象的动态类型始终是表达式的类型
更新:
3.9告诉我动态类型意味着类型的确定必须在运行时延迟
关于3.10,我有几个问题:
3.9和3.10之间的关系是什么
为什么强调价值
这是否意味着prvalue的动态和静态类型始终相同
3.9和3.10之间的关系是什么
它们都定义了“动态类型”。非正式地说,表达式的动态类型是包含由表达式表示的对象的完整对象的类型
为什么强调价值
也许为了清楚起见,他们决定分别解释glvalues和prvalues的“动态类型”含义。其原理(在C++17之前)是,glvalue指的是对象或函数,而prvalue指的是对象的值,因此它们本质上有些不同
这是否意味着prvalue的动态和静态类型始终相同
对。虽然可以创建一个引用另一个对象的基类子对象的glvalue,但prvalue并不引用任何东西,因此它就是这样。任何创建另一个对象的子对象的prvalue的尝试都只会创建该子对象的副本,而该副本是一个完整的对象
3.9和3.10之间的关系是什么
它们都定义了“动态类型”。非正式地说,表达式的动态类型是包含由表达式表示的对象的完整对象的类型
为什么强调价值
也许为了清楚起见,他们决定分别解释glvalues和prvalues的“动态类型”含义。其原理(在C++17之前)是,glvalue指的是对象或函数,而prvalue指的是对象的值,因此它们本质上有些不同
这是否意味着prvalue的动态和静态类型始终相同
对。虽然可以创建一个引用另一个对象的基类子对象的glvalue,但prvalue并不引用任何东西,因此它就是这样。任何创建作为另一个对象的子对象的prvalue的尝试都只会创建该子对象的副本,而该副本是一个完整的对象。3.9定义“glvalue的动态类型”,3.10定义“prvalue的动态类型”
文档使用了稍微不寻常的格式。这两个部分应视为单独的定义,不得重叠。(所有表达式均为glvalues或prvalues,但不能同时为两者)。3.9定义“glvalue的动态类型”,3.10定义“prvalue的动态类型”
文档使用了稍微不寻常的格式。这两个部分应视为单独的定义,不得重叠。(所有表达式都是glvalues或prvalues,但不是同时使用两者)。这其中的哪一部分您理解有困难?看看这是否有帮助:@Yakk感谢您的课,我更新了我的问题。这其中的哪一部分您理解有困难?看看这是否有帮助:@Yakk感谢您的课,我更新了我的问题。