微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决带省略号的构造函数的调用约定更改

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

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 举报,一经查实,本站将立刻删除。