§1.3.7 (N4140) 中不是缺少"多态"一词吗?
Isn't the word `polymorphic` missing in §1.3.7 (N4140)?
在§1.3.7动态类型中缺少polymorphic
(在括号中)这个词吗?
[示例:如果一个指针(8.3.1)p,其静态类型为"指向"B"指的是a (
polymorphic
) D类物体,从B(第10节)派生,表达式*p的动态类型为"d"。引用(8.3.2)的处理方式类似。-end example]
首先,即使我们想要在这种情况下要求多态性,将该要求强加给B
而不是D
类会更有意义(并且作为D
也会成为多态的结果)。
我不认为"动态类型"的定义需要这样的限定。如果您通读标准的其余部分,您将看到,当静态类型和动态类型不同时,这并不自动意味着表达式的行为与动态类型相似。这被指定为,只有当静态类型是多态时才会发生。例如,参见[expr.typeid]/2-3:
当
typeid
应用于多态类类型(10.3)的glvalue表达式时,结果引用到一个std::type_info
对象,表示最派生对象(1.8)的类型(即动态对象)类型)。如果将一元*
运算符应用于一个指针,指针是空指针值(4.10),typeid
表达式抛出异常(15.1)。匹配std::bad_typeid
异常类型(18.7.3)的处理程序。当
typeid
应用于一个表达式而不是一个多态类类型的glvalue时,结果引用转换为一个std::type_info
对象,表示表达式的静态类型。左值到右值(4.1),数组到指针(4.2)和函数到指针(4.3)转换不适用于表达式。如果类型为表达式是类类型,类必须是完全定义的。表达式是一个未求值的操作数(5)条款。
在第3段中,你可以看到它明确地说"静态类型"。这是因为静态类型和动态类型仍然可以不同,但只有静态类型重要,因为它不是多态的。
根据c++标准(10.3虚函数)
1虚函数支持动态绑定和面向对象编程。声明或继承虚函数的类是称为多态类。
在你引用的引言中,没有要求类是多态的,也就是说它们有一个虚函数。因此,包含这个单词是不正确的。
引号给出了动态类型的一般定义,而不管类是否是多态的
- 多态性和功能结合
- 具有默认模板参数的多态类的模板推导失败
- 找不到成员对象:没有名为get_event()的成员,也处理多态性和向量
- 多态二进制函数
- 访问存储在向量C++中的结构的多态成员
- 使用取消引用的指针的多态性会产生意外的结果.为什么?
- 将 std::allocate_shared 与多态资源分配器一起使用
- 通过switch和static_cast访问多态对象的运行时类型
- C++boost序列化多态性问题
- 多态杆件变量 - 类设计
- 如何查找哪个类对象位于数组的特定索引上(多态性)
- 如何在多线程中正确使用unique_ptr进行多态性?
- Doees the 'this' 指针参与虚函数的多态行为
- C++ 在堆栈中包含多态属性的类对象存储
- 基类和派生类的多态赋值运算符
- 转身多态对象
- 如何在基类指针向量的元素上应用重载的多态函数
- 具有智能指针的多态性
- 当目标指针不是基类的类型时,为什么允许dynamic_cast为多态类生成 null 指针?
- §1.3.7 (N4140) 中不是缺少"多态"一词吗?