当您键入#include <iostream>时,是否包含模板?</iostream>

时间:2012-03-11 18:24:13

标签: c++

我只是想知道,因为如果您输入#include <map>,就会包含地图模板。

5 个答案:

答案 0 :(得分:5)

尖括号(< >)只告诉编译器它应该如何查找文件(而不是引号" ")。该文件的内容无关紧要,它可以包含无论


#include <map>template <...> map中的尖括号没有任何关联。语法只是为完全不同的目的使用相同的字符。

答案 1 :(得分:1)

它包含一个头文件。它可能包含模板,但也可能只包含#define语句,函数原型等。

答案 2 :(得分:1)

选择字符的主要原因之一是文件名中不常使用<>",因此它们可以制作非常好的字符来分隔文件名。

使用类似的逻辑,{+ 1}}和<都不会出现在C ++标识符中,因此这些字符可用于分隔模板参数。

因此,虽然选择>的逻辑相似,但实际的分隔名称是不相关的。

答案 3 :(得分:0)

至少考虑到当前大多数编译器处理模板的方式,是的。具体来说,大多数编译器需要“看到”模板的定义才能让您实例化该模板。

直到C ++ 03,(理论上)有一个export关键字可以消除这个要求,但是大多数编译器都没有实现它,即使是那个微不足道的关键字,也没有使用它。无论如何,这样的图书馆。

答案 4 :(得分: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>必须包含的内容,只是它应该声明流。