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

Does adding an arguments with default values to functions break ABI?

标题说明了一切。我将向具有默认值的 class 的成员函数添加一个参数。参数是 non-trivial 类型。这会破坏 ABI 吗?假设我的新库版本将是 M.m.0,它应该可以作为 drop-in 替代所有使用 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:我做了我自己的测试,它正在工作。只是不能确定

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