Портативный код на C++ означает, что такой код может быть скомпилирован для (практически) любой платформы и любой реализации. Так что цели, это неважно, если программа должна быть запущена на
- различные операционные системы (Windows, Linux, OSX)
- различных архитектур (x86, x86-64, титан, СПАРК, рука)
- разные библиотеки времени выполнения/составители (GCC, Clang, MSVC)
для достижения этой цели, вы должны рассмотреть многие аспекты - не используйте реализации определенных API-интерфейсы и поведение, только использовать стандартную библиотеку - Не следует использовать архитектуру, определенные предположения и поведение, как и char
имеет 8 бит, или отрицательные целые числа являются 2-дополнение и переполнение или что int
является 32-разрядное и так далее
Проблема, часто приходится использовать материал , для которого нет стандарта в C++, например, сетевых интерфейсов. Поэтому библиотеки часто пытаются обойти эту проблему, используя различные конкретные решения для самых популярных систем, выбранных препроцессором.
Так как вы видите, что переносимость всегда должна видеть в контексте, поскольку абсолютная мобильность не является практической достижимой. Например, код C++, переносимый для любого компилятора, совместимого с C++ 11 (но большинство компиляторов не 100%, см. MSVC 12/2013) или переносимый для компиляторов, совместимых с C++ 11 и POSIX (так что все Unix-системы могут используй это). И так далее.
Среди прочих, код, который не использует расширения, специфичные для компилятора, и не зависит от неопределенного поведения, даже если он работает. –
Код, который придерживается стандарта iso, не использует специфичные для платформы функции, такие как os-вызовы или встроенную сборку для определенного процессора, и поэтому может быть скомпилирован для запуска на любой платформе со стандартным компилятором. – Unimportant
Я предполагаю, что реальный вопрос - это то, что «не переносит C++» :-) –