web-dev-qa-db-ja.com

iostreamとiostream.hの違い

iostreamiostream.hの違いは何ですか?

41
ckv

iostream.hは、それを提供するコンパイラによって廃止されました。iostreamはC++標準の一部です。

明確にするために、現在のC++標準(INCITS ISO IEC 14882 2003)ではiostream.hについての言及はまったくありません。

編集:@Jerryが言及したように、現在の標準では言及されていないだけでなく、C++の標準でも言及されていません。

44
Brian R. Bondy

iostreamは標準ヘッダーです。 iostream.hは、非標準のヘッダーであり、先行標準のC++で非常に一般的でしたが、iostreamはそれから発展したものです。おそらく古いプログラムで使用するために、iostream.hを使用することはまだ一般的です。

実装にiostream.hの作業用コピーがある場合、iostream.hは一般にstd名前空間にありますが、iostream.hは一般的に名前空間の前にあり、それらを使用しなかった以外は、iostreamと同じです。

実装にiostreamとiostream.hの両方がある場合、iostreamは次のように機能します。

namespace std
{
#include <iostream.h>
}

それは必ずしもそれが書かれている方法ではありませんが。

14
David Thornley

C++が最初に作成されたとき、標準ランタイムライブラリ内のすべてのファイルは.hで終わっていました。人生は一貫していて、良かったです。 coutとcinのオリジナルバージョンはiostream.hにありました。言語がANSI委員会によって標準化されたとき、彼らはランタイムライブラリのすべての関数をstd名前空間に移動することを決定しました(これは一般に良い考えです)。ただし、これには問題がありました。すべての関数をstd名前空間に移動すると、古いプログラムはどれも機能しなくなります。

この問題を回避するために、古いプログラムの下位互換性を維持しながら、同じ名前を使用するが.h拡張子のない新しいヘッダーファイルのセットが導入されました。これらの新しいヘッダーファイルは、std名前空間内にすべての機能を備えています。このようにして、#include <iostream.h>を含む古いプログラムを書き直す必要がなくなり、新しいプログラムは#include <iostream>に書き直すことができます。

標準ライブラリのヘッダーファイルをインクルードする場合は、非.hバージョンが存在する場合はそれを使用してください。それ以外の場合は、サポートが終了した非推奨バージョンのヘッダーを使用します。

さらに、Cから継承されたC++でも有用なライブラリの多くには、cプレフィックスが付けられました(たとえば、stdlib.hがcstdlibになりました)。これらのライブラリの機能もstd名前空間に移動され、名前の衝突を回避できるようになりました。

ただし、独自のヘッダーファイルを作成するときは、コードをstd名前空間に配置しないため、すべてに.h拡張子を付ける必要があります。

ルール:ライブラリの非.hバージョンが存在する場合はそれを使用し、std名前空間を介して機能にアクセスします。非.hバージョンが存在しない場合、または独自のヘッダーを作成する場合は、.hバージョンを使用します

ソース: https://www.learncpp.com/cpp-tutorial/19-header-files/

8
Pushpak Sharma