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

C++ 向函数中添加带有默认值的参数是否会破坏ABI?,c++,backwards-compatibility,abi,C++,Backwards Compatibility,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); } /* Ver

标题说明了一切。我将使用默认值向类的成员函数添加一个参数。该参数属于非平凡类型。这个坏了吗?假设我的新库版本将是
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:我做了我自己的测试,它正在工作。只是不能肯定

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

名称说明了一切。默认参数是参数,与函数类型(特别是函数参数)无关。“这会使ABI向后中断吗?”很抱歉?
do\u stuff
在新旧编译中会得到不同的名称-我认为这打破了我对ABI兼容性的定义。出于好奇,你知道一个ABI不会因为这个改变而被打破吗???@奥利弗:我不知道。但是,ABI可以为具有默认参数的函数生成多个符号。这几乎就是在不破坏ABI的情况下更改类的方法(假设修改后的函数不是
virtual
):相反,如果使用默认参数,则可以在调用另一个转发所有参数并添加默认参数时重载函数。