C++ 標準は抽象的であり、特定の OS (AFAIK) について言及していません。したがって、iostream ライブラリは移植可能です。そうは言っても、C++ 標準では、ユーザーに表示される (標準の C++ ライブラリに隠されているだけでなく) 一部を含む、特定の実装の詳細を実装に依存させることができます。これにより、OS やコンパイラのプロバイダーは、C++ 標準を実装するための優先する方法を選択できます。
実装依存の動作に依存するコードは、同じ OS やコンパイラの異なるバージョン内であっても、明らかに移植性がありません。言い換えれば、そのようなコードは避けるべきです。
注: 実装に依存するコードを記述する必要がある場合があります。この場合、仮定された実装依存の動作を壊さないようにコードを保護することが不可欠です。たとえば、プログラムはsizeof(long unsigned)==8
. この場合、少なくともstatic_assert(sizeof(long unsigned)==8,"long unsigned not 8 bytes")
無効なコードのコンパイルを停止する必要がありますが、理想的には代替バージョンが存在し、代わりにテンプレート マジック (または C スタイル マクロ) を使用して選択する必要があります。C++11 標準では、このような問題を回避するために、保証された(および同様の)型std::uint64_t
を実際に提供しています。ただし、実装依存のままです。 sizeof(std::uint64_t)==8
sizeof(ostream)