C++ 键入时#include<;iostream>;,是否包含模板?

C++ 键入时#include<;iostream>;,是否包含模板?,c++,C++,我只是想知道,如果你键入#include,你就包括了地图模板。它包括一个头文件。它可能包含模板,但也可能只包含#define语句、函数原型等。尖括号()只需告诉编译器它应该如何查找文件(与引号相对)。该文件的内容是无关的,它可以包含任何内容 #include和模板映射中的尖括号没有任何相关性。语法只是将相同的字符用于完全不同的目的。至少考虑到当前大多数编译器处理模板的方式,是的。具体地说,大多数编译器需要先“看到”模板的定义,然后才能让您实例化该模板 在C++03之前,(理论上)有一个expo

我只是想知道,如果你键入
#include
,你就包括了地图模板。

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

尖括号(
)只需告诉编译器它应该如何查找文件(与引号相对)。该文件的内容是无关的,它可以包含任何内容



#include
模板映射
中的尖括号没有任何相关性。语法只是将相同的字符用于完全不同的目的。

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


在C++03之前,(理论上)有一个
export
关键字可以消除这一要求,但大多数编译器从未实现过它,即使是实现了它的极少数编译器,也没有在大多数类似的库中使用它。

根据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;

}
#包括
#包括
#包括
#包括
名称空间标准{
外间流cin;
外部环境;
外部奥斯特雷姆塞尔;
外部奥斯特雷姆阻塞;
外用wistream-wcin;
外部输出;
外部沃克尔;
外部工作日志;
}
其中包括很多模板


早期的标准没有明确说明头
必须包含哪些内容,只是它应该声明流

选择字符的一个主要原因是
都不是文件名中常用的字符,因此它们是很好的文件名分隔字符

使用类似的逻辑,C++代码中既没有出现<代码> >代码也没有代码> <代码>,因此字符可以用来分隔模板参数。


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

您是否尝试查看该标题?@CarlNorum:第一行可能是“查看者自行决定”;)说真的,它通常不会被凡人阅读。谢谢。那么,为什么我们使用尖括号,而不是“include”iostream.hh“?它们的含义不同,都是由实现定义的。如果
搜索失败,则实现将返回到
情况。在大多数实现中,
搜索当前目录,
搜索系统头目录。检查C++规范部分16.2。