Разве добавление аргументов со значениями по умолчанию к функциям нарушает 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: я сделал свой собственный тест, и он работает. Просто не могу быть уверен

8

Решение

Большинство C ++ ABI кодируют типы аргументов функций [member] в имени символа. Аргументы по умолчанию обычно реализуются как временные объекты, вызываемые в точке вызова. Если это выбор, сделанный для используемого ABI, добавление аргумента по умолчанию изменит ABI. Так ли это, вам нужно определить, какой конкретный ABI используется.

11

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector