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

时间:2017-01-20 12:39:44

标签: c++ backwards-compatibility abi

标题说明了所有。我将为具有默认值的类的成员函数添加一个参数。这个论点属于非平凡的类型。这会破坏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 个答案:

答案 0 :(得分:11)

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