下面不是polymorphic (括号中)这个词吗,在§1.3.7动态类型中缺少
示例:如果静态类型为“指向B类的指针”的指针(8.3.1) p指向从B派生的(
polymorphic)类D的对象,则表达式*p的动态类型为“D”。引用(8.3.2)被类似地对待。-end实例
发布于 2015-07-28 17:41:30
首先,即使我们希望在这种情况下需要多态性,将这个要求强加于类B,而不是D (并且由于这个D也会变得多元化),这将是更有意义的。
第二,动态类型的一般概念根本不依赖于多形性。
发布于 2015-07-28 17:36:47
按照C++标准(10.3虚拟函数)
1虚拟函数支持动态绑定和面向对象编程.声明或继承虚拟函数的类称为多态类。
在您引用的引文中,不需要类是多态的,即它们有一个虚拟函数。所以包括这个词是不对的。
引号给出了动态类型的一般定义,而不管这些类是多态的还是不..。
发布于 2015-07-28 17:39:27
我不认为“动态类型”的定义需要这种资格。如果您查看标准的其余部分,您将看到,当静态类型和动态类型不同时,这并不意味着表达式的行为与动态类型类似。这是指定给的,只有当静态类型是多态时才会发生。例如,请参见expr.type For /2-3:
当
typeid应用于其类型为多态类类型(10.3)的glvalue表达式时,结果引用一个std::type_info对象,该对象表示所引用的最派生对象(1.8) (即动态类型)的类型。如果通过将一元*运算符应用于指针获得glvalue表达式,且指针为空指针值(4.10),则typeid表达式抛出与std::bad_typeid异常类型的处理程序(18.7.3)匹配的类型的异常(15.1)。 当typeid应用于多态类类型的glvalue以外的表达式时,结果引用一个std::type_info对象,该对象表示表达式的静态类型。Lvalue到rvalue (4.1)、数组到指针(4.2)和函数到指针(4.3)的转换不应用于表达式.如果表达式的类型是类类型,则应完全定义类.表达式是一个未计算的操作数(第5条)。
在第3段中,你可以看到它具体地写着“静态类型”。这是因为静态类型和动态类型仍然可以不同,但是只有静态类型才重要,因为它不是多态的。
https://stackoverflow.com/questions/31683281
复制相似问题