继承关键字

Microsoft 专用

class class-name
class __single_inheritance class-name
class __multiple_inheritance class-name
class __virtual_inheritance class-name

其中:

class-name
要声明的类的名称。

C++ 允许在类定义前声明指向类成员的指针。 例如:

class S;
int S::*p;

在上面的代码中,p 声明为指向类 S 的整数成员的指针。但尚未在此代码中定义 class S,只是进行了声明。 当编译器遇到此类指针时,它必须生成此指针的泛化表示形式。 表示形式的大小依赖于指定的继承模型。 可通过三种方式指定编译器的继承模型:

  • 在命令行中使用 /vmg 开关

  • 使用 pointers_to_members pragma

  • 使用继承关键字 __single_inheritance__multiple_inheritance__virtual_inheritance。 此技术控制每个类的继承模型。

    注意

    如果在定义类后始终声明指向类成员的指针,则无需使用上述任何选项。

如果在定义类之前声明指向类成员的指针,则会对生成的可执行文件的大小和速度产生负面影响。 类使用的继承越复杂,表示指向类的成员的指针所需的字节数就越大。 并且解释指针所需的代码量也会越大。 单一(或无)继承的复杂度最低,虚拟继承的复杂度最高。 指向在定义类之前声明的成员的指针始终使用最大、最复杂的表示形式。

如果将上面的示例更改为:

class __single_inheritance S;
int S::*p;

然后,无论指定的命令行选项或 pragma 如何,指向 class S 的成员的指针都将使用可能的最小表示形式。

注意

类的指向成员的指针表示形式的同一向前声明应出现在声明指向该类的成员的指针的每个翻译单元中,并且声明应在声明指向成员的指针之前出现。

为了与以前的版本兼容,除非指定了编译器选项 /Za(禁用语言扩展),否则 _single_inheritance_multiple_inheritance_virtual_inheritance__single_inheritance__multiple_inheritance__virtual_inheritance 的同义词。

结束 Microsoft 专用

另请参阅

关键字