/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 开发环境中设置此编译器选项

  1. 打开项目的“属性页” 对话框。 有关详细信息,请参阅在 Visual Studio 中设置 C++ 编译器和生成属性

  2. 选择“配置属性”>“C/C++”>“命令行”属性页

  3. 在“附加选项”框中输入编译器选项。

以编程方式设置此编译器选项

另请参阅

/vmb/vmg(表示方式)
MSVC 编译器选项
MSVC 编译器命令行语法