2012-03-11 1 views
-1

#include <map>と入力するとマップテンプレートが含まれているので、私は不思議に思っていました。#include <iostream>と入力すると、テンプレートを含めていますか?

+1

このヘッダーを調べてみましたか? –

+1

@CarlNorum:最初の行はおそらく「ビューアの裁量を勧告しました」;)真剣に、それは通常は人間によって読めるものではありません。 – MSalters

答えて

5

角括弧(< >)だけで(引用符" "ではなく)、それはファイルをどのように見えるべきかをコンパイラに伝えるのも含まれている場合があります。そのファイルの内容は無関係です。のいずれでもを含めることができます。 #include <map>template <...> map


角括弧は一切関係がありません。構文はまったく異なる目的のために同じ文字を使用します。

+0

、ありがとうございました。 –

1

ヘッダーファイルが含まれています。これは、テンプレートが含まれていてもよいが、唯一#define文、関数のプロトタイプなど

+0

ありがとうございます。なぜ、#include "iostream.hh"の代わりに山括弧を使用するのですか? –

+0

これは、異なることを意味し、両方の実装が定義されています。 '' '検索が失敗した場合、実装は' <> 'のケースに戻ります。ほとんどの実装では、 '「」'>現在のディレクトリを検索し、 '<'システムヘッダディレクトリが検索されます。 C++仕様のセクション16.2を参照してください。 –

+0

私は、あなたに感謝し、参照:)私は見 –

0

少なくとも、現在のコンパイラがテンプレートを処理する方法を考えれば、そうです。具体的には、ほとんどのコンパイラは、そのテンプレートをインスタンス化する前にテンプレートの定義を「見た」必要があります。

C++ 03までは、理論的にはこの要求を排除するためのキーワードはexportでしたが、ほとんどのコンパイラはこれを実装していませんでした。そのようなほとんどのライブラリでは使用しなかったとにかく

0

C++ 11標準によれば、ヘッダは、テンプレートの多くを含む本

#include <ios> 
#include <streambuf> 
#include <istream> 
#include <ostream> 

namespace std { 

    extern istream cin; 
    extern ostream cout; 
    extern ostream cerr; 
    extern ostream clog; 

    extern wistream wcin; 
    extern wostream wcout; 
    extern wostream wcerr; 
    extern wostream wclog; 

} 

を含有します。

以前の標準

は、それがストリームを宣言すべきであるだけであること、含まれている必要があります正確に何 <iostream>をヘッダーにその明示的ではなかったです。

1

文字の選択の主な理由の1つは、<>"もファイル名で一般的に使用されないため、ファイル名を区切るのに非常に優れた文字を作成することです。

類似のロジックを使用すると、<でも>もC++識別子には表示されないため、文字を使用してテンプレート引数を区切ることができます。

したがって、<>の選択ロジックは似ていますが、実際に区切られた名前は無関係です。

関連する問題