当前位置:  开发笔记 > 编程语言 > 正文

向函数添加带默认值的参数是否会破坏ABI?

如何解决《向函数添加带默认值的参数是否会破坏ABI?》经验,为你挑选了1个好方法。

标题说明了所有.我将为具有默认值的类的成员函数添加一个参数.这个论点属于非平凡的类型.这会破坏ABI吗?假设我的新库版本将会出现M.m.0,并且应该可以作为所有使用的链接应用程序的替代品M.m-1.x.

示例代码:

// These are some classes: base and child : public base

/* Version 1.2.3 */
class foo() {
public:
   void do_that_stuff(const std::string a);
}

/* Version 1.3.0 */
class foo() {
public:
   void do_that_stuff(const std::string a, const base& b = base());
}

PS:我做了自己的测试,并且它正在运行.只是不能确定



1> Dietmar Kühl..:

大多数C++ ABI在符号名称中编码[member]函数的参数类型.默认参数通常实现为在调用点处召唤的临时对象.如果这些是为所使用的ABI所做的选择,则添加默认参数将更改ABI.无论是否是这种情况,您都需要确定使用的特定ABI.


@Oliv:我不知道.但是,ABI*可以为具有默认参数的函数生成多个符号.这几乎是改变类而不破坏ABI的方法(假设修改后的函数不是"虚拟"):相反,如果使用默认参数,函数可以在调用另一个转发所有参数并添加违约论点.
推荐阅读
可爱的天使keven_464
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有