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

问题描述

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

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?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)