带省略号的构造函数的调用约定更改

时间:2021-02-11 05:01:23

标签: c++ visual-c++

我正在使用一个库,该库有一个在其构造函数中采用可变数量参数的类。当我更改此类以使其从虚拟基类继承时,如下所示:

class A:public virtual B {
public:
   A(int i, ...);
}

编译器给出以下警告:

<块引用>

'function' : 具有虚基类的构造函数有 '...';调用可能与旧版本的 Visual C++ 不兼容

Ms docs 关于警告 C4256 的主题是这样说的:

<块引用>

可能不兼容。 考虑以下代码示例。如果构造函数 S2::S2( int i, ... ) 的定义是使用版本 7 之前的 Microsoft C++ 编译器版本编译的,但以下示例是使用当前版本编译的,则调用构造函数由于特殊情况调用约定的更改,S3 将无法正常工作。如果两者都是使用 Visual C++ 6.0 编译的,则调用也不会完全正确,除非没有为省略号传递参数。

谁能告诉我“特殊情况调用约定更改”是什么?据我了解,所有可变参数函数一直都实现为 cdecl?

0 个答案:

没有答案
相关问题