제목에 모두 나와 있습니다. 저는 디폴트 값을 가진 클래스의 멤버 함수에 인수를 추가 할 것입니다. 인수는 사소한 유형의 인수입니다. 이게 ABI를 깬거야? 내 새 라이브러리 버전이 M.m.0
이고 M.m-1.x
을 사용하는 모든 링크 된 응용 프로그램의 드롭 인 대체품으로 사용 가능하다고 가정 해 봅시다.함수에 기본값을 가진 인수를 추가하면 ABI가 손상됩니까?
샘플 코드 :
// 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 : 나는 내 자신의 테스트를했고, 그것을 일하고있어. 그냥 확신 할 수 없다.
이름은 모두 그것을 말합니다. 기본 인수는 * 인수 *이며 함수 유형과 관련이 없습니다 (특히 함수 매개 변수 사용). –
_ "이게 ABI를 거꾸로 망가 뜨 렸니?"_ 미안 해요? –
'do_that_stuff'는 이전 컴파일과 새로운 컴파일에서 다른 맹 글링 된 이름을 갖게 될 것입니다. ABI 호환성에 대한 내 정의가 깨지는 것 같습니다. –