Ответ 1
Это зависит прежде всего от того, как вы используете стандартную библиотеку С++ в своей библиотеке.
-
Если вы его вообще не используете, вы вряд ли столкнетесь с какими-либо проблемами.
-
Если вы используете
libstdc++
, вы можете столкнуться с некоторыми проблемами:-
Передача стандартных объектов библиотеки в вашу библиотеку и из нее не всегда будет работать (например,
std::list
в режиме С++ 11 в конечном итоге будет больше, чем в настоящее время в режиме С++ 98, потому что это растущий член данныхsize
, а представлениеstd::string
меняется на подсчет, не содержащий ссылок). Разработчики g++ планируют внедрить форму опознавания символов, чтобы поймать эти проблемы во время связи, поэтому вы получите ошибки, если попадете в любой из проблемных случаев, но это еще не реализовано в g++ и никогда не может быть реализовано в Clang. Вы можете избежать этой проблемы, гарантируя, что ваш интерфейс библиотеки не включает стандартные типы библиотек. -
Некоторые символы могут изменять значение (например,
std::complex::real
иstd::complex::imag
возвращать ссылки в режиме С++ 98, но возвращать значение в режиме С++ 11 из-за недостаткаconstexpr
), Если вы связываете (неоптимизированный) код с использованием как форм С++ 98, так и С++ 11, возможно, вы выбрали неправильную реализацию со странными результатами во время выполнения.
-
-
Если вы используете
libc++
, вы не должны видеть никаких проблем.libc++
был разработан как двоично-совместимый между режимами С++ 98 и С++ 11. -
Если вы используете
libc++
в библиотеке иlibstdc++
в программе, или наоборот, то большинство несовместимостей будет обнаружено во время соединения. (libc++
используетinline namespace
внутриnamespace std
, содержащий большую часть своих символов, что приводит к несовместимости времени соединения, если вы пытаетесь передать типыlibstdc++
через границу). Тем не менее, вы все еще можете столкнуться с проблемами времени выполнения, если ваш интерфейс библиотеки косвенно содержит стандартные типы библиотек (например, если он используетstruct
, который имеет стандартный тип библиотеки в качестве члена). Для типов, которыеlibc++
не поддерживает версию, он должен быть двоично-совместимым сlibstdc++
(как в режимах С++ 98, так и в С++ 11).