C库头文件的C++名字与C名字的区别

来源:互联网 发布:深圳市阿里云大厦饺子 编辑:程序博客网 时间:2024/04/27 22:27

C++Primer 3rd中开篇中,有这样一段程序代码:

 

#include <iostream>

#include <vector>

#include <string>

 

#define DEBUG

using namespace std;

 

int main()

{

#ifdef DEBUG

       cout << "Beginning execution of main ()/n";

#endif

       string word;

       vector<string> text;

       while (cin >> word)

       {

#ifdef DEBUG

              cout << "word read:"<< word <<"/n";

#endif

              text.push_back (word);

       }

}

 注意到其引入头文件处:

#include <iostream>

#include <vector>

#include <string>

 

     这里不得不提到#include<iostream.h>#include<iostrem>区别,进而要谈论一下C库中头文件的C++名字与C名字的区别,其实在C++ Primer中已有比较详细的描述,总结起来有以下几条:

(1)    iostream.h里面定义的所有类以及对象都是在全局空间里,所以你可以直接用cout ; 但在iostream里面,它所定义的东西都在名字空间std里面,所以你必须加上 using namespace std才能使用cout

(2)    string类库属于特殊情况。问题在于C++要兼容C的标准库,而C的标准库里碰巧也已经有一个名字叫做“string.h”的头文件,包含一些常用的C字符串处理函数,如strcmp。这个头文件跟C++string类半点关系也没有,所以<string>并非<string.h>升级版本,他们是毫无关系的两个头文件。

(3)    C库头文件的C++名字总是以字母C开头,后面是去掉后缀.h的名字,由于在各种C++实现中,头文件的后缀各不相同,因此标准C++头文件没有指定后缀。如输入输出流的C++头文件名字为iostreamC头文件名字为iostream.h

(4)    使用头文件的C名字,或者C++名字,两种情况下头文件的#include预处理器指示符的效果也会不同:

a.使用C++头文件的#include指示符:#include<iostream>。代码的意思是将cassert的内容读入到文本文件中。但是由于所有的C++库名字是在名字空间std中被定义的,因而在程序文本文件中,它们是不可见的,除非用下面的using指示符显式地使其可见:using namespace std;

b.使用C头文件的#include指示符:#include <iostream.h>就可直接在程序文本文件中使用名字assert(),而无需使用using指示符

 

 

 

 

 

原创粉丝点击