/vd(禁用构造置换)

语法

/vdn

参数

0
抑制 vtordisp 构造函数/析构函数位移成员。 仅当你确定所有类构造函数和析构函数都虚拟调用虚函数时,才选择此选项。

1
启用隐藏 vtordisp 构造函数/析构函数位移成员的创建。 此选项为默认选项。

2
允许你对正在构造的对象使用 dynamic_cast 运算符。 例如,从虚拟基类到派生类的 dynamic_cast。

当你有一个带有虚拟功能的虚拟基础时 /vd2 会添加一个 vtordisp 字段。 /vd1 应该足以满足需要。 需要 /vd2 的最常见情况是虚拟基中唯一的虚拟函数是析构函数。

备注

这些选项仅适用于使用虚拟基的 C++ 代码。

Visual C++ 在使用虚拟继承的情况下实现了 C++ 构造置换支持。 构造置换解决了在构造进一步派生类期间从构造函数调用在虚拟基中声明并在派生类中重写的虚函数时产生的问题。

问题是,由于位移与类的虚拟基数与派生类的偏移量之间存在差异,虚拟函数可能会传递不正确的 this 指针。 该解决方案为类的每个虚拟基提供一个构造偏移量调整,称为 vtordisp 字段。

默认情况下,每当代码定义用户定义的构造函数和析构函数时,都会引入 vtordisp 字段,并且还会重写虚拟基的虚拟函数。

这些选项会影响整个源文件。 使用 vtordisp 可以逐个类地禁用 vtordisp 字段,然后重新启用这些字段。

在 Visual Studio 开发环境中设置此编译器选项

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

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

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

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

另请参阅

MSVC 编译器选项
MSVC 编译器命令行语法