iostream
とiostream.h
の違いは何ですか?
iostream.h
は、それを提供するコンパイラによって廃止されました。iostream
はC++標準の一部です。
明確にするために、現在のC++標準(INCITS ISO IEC 14882 2003)ではiostream.h
についての言及はまったくありません。
編集:@Jerryが言及したように、現在の標準では言及されていないだけでなく、C++の標準でも言及されていません。
iostreamは標準ヘッダーです。 iostream.hは、非標準のヘッダーであり、先行標準のC++で非常に一般的でしたが、iostreamはそれから発展したものです。おそらく古いプログラムで使用するために、iostream.hを使用することはまだ一般的です。
実装にiostream.hの作業用コピーがある場合、iostream.hは一般にstd
名前空間にありますが、iostream.hは一般的に名前空間の前にあり、それらを使用しなかった以外は、iostreamと同じです。
実装にiostreamとiostream.hの両方がある場合、iostreamは次のように機能します。
namespace std
{
#include <iostream.h>
}
それは必ずしもそれが書かれている方法ではありませんが。
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バージョンを使用します