/vmm
、/vms
、/vmv
(通用表示形式)
在选择 /vmg
作为表示法时使用。 这些选项指示尚未遇到的类定义的继承模型。
语法
/vmm
/vms
/vmv
选项
/vmm
指定最常规的指向类成员的指针表示形式可以使用多重继承。
相应的继承关键字和 #pragma pointers_to_members
参数为 multiple_inheritance
。
此表示形式大于单继承所需的表示形式。
如果使用 /vmm
并声明指向具有虚拟继承模型的类的成员的指针,编译器将生成错误。
/vms
指定最常规的指向类成员的指针表示形式可以不使用继承,也可以使用单继承。相应的继承关键字和 #pragma pointers_to_members
参数为 single_inheritance
。
此选项生成指向类成员的指针的最小可能表示形式。
如果使用 /vms
并声明指向具有多重继承模型或虚拟继承模型的类的成员的指针,编译器将生成错误。
/vmv
指定最常规的指向类成员的指针表示形式可以使用虚拟继承。 此指针表示形式永远不会导致错误,它是默认值。
相应的继承关键字和 #pragma pointers_to_members
参数为 virtual_inheritance
。
相比于其他选项,此选项需要更大的指针和更多的代码来解释指针。
备注
在 Visual Studio 2019 及更早版本中,Microsoft 将不同的表示形式(大小不同)用于指向成员的指针类型。 没有继承或只有单继承的指向成员的指针类具有最小的表示形式。 有多重继承的指向成员的指针类具有较大的表示形式。 有虚拟继承的指向成员的指针类具有最大的表示形式。 如果编译器未指定任何表示形式模型,则默认使用最大、最常规的表示形式。
指定其中一个继承模型选项之后,无论指向类成员的指针是哪种继承类型,无论是在类之前还是之后声明这些指针,该模型都将用于所有指针。 如果始终使用单继承类,可以通过使用 /vms
进行编译来减小代码大小。 但是,如果要使用最常规的表示形式(以牺牲最大数据表示形式为代价),请使用 /vmv
进行编译。
在 Visual Studio 开发环境中设置此编译器选项
打开项目的“属性页” 对话框。 有关详细信息,请参阅在 Visual Studio 中设置 C++ 编译器和生成属性。
选择“配置属性”>“C/C++”>“命令行”属性页。
在“附加选项”框中输入编译器选项。
以编程方式设置此编译器选项
- 请参阅 AdditionalOptions。