namespace是指标识符的各种可见范围。命名空间用关键字namespace 来定义。命名空间是C++的一种机制,用来把单个标识符下的大量有逻辑联系的程序实体组合到一起。此标识符作为此组群的名字。

1 直接指定标识符

例如std::iostream而不是iostream。完整语句如下:

std::cout<<std::hex<<3.4<<std::endl;

2 使用using关键字

加入using std::cout; using std::endl; using std::cin; 则前面语句可以写成如下代码:

cout << hex << 3.4 << endl;

3 使用using namespace std

例如:

#include

#include

#include

using namespace std;

stdio.h及cstdio的区别

在C++下,若要使用C中已有库中的函数如stdio,文件包含方式为前面加一个c,同时去掉.h后缀,如#include <cstdio>,同时必须加上using namaspace;对于其他类似的函数同

对于C++特有的库,直接用去掉.h后缀的文件包含,并加上using namaspace;

C++头文件包含何时要加.h,何时不加.h,何时在前面加c?

a. 如果这个头文件是旧C++特有的,那么去掉 h后缀,并放入std名字空间,

比如 iostream.h 变为 iostream.

因此,若要使用iostream库中函数,文件包含为

#include <iostream>
using namespace std;

若只写#include <iostream>,而没有using namespace std;,会报错:
error C2065: 'cout' : undeclared identifier

因为cout是在std中命名的,必须加上using namespace std;

可能在早期的编译器中,也支持#include <iostream.h>,可不用写using namespace std,但用VS2010编译,会报错Cannot open include file: 'iostream.h': No such file or directory。

b. 如果这个头文件是C也有的,那么去掉 h后缀,增加一个c前缀,比如 string.h变为 cstring;stdio.h 变为 cstdio, 等等

cstdio是将stdio.h的内容用C++头文件的形式表示出来。stdio.h是C标准函数库中的头文件,即:standard buffered input&output。提供基本的文字的输入输出流操作(包括屏幕和文件等)。由于C语言并没有提供专用于文字输入输出的关键字,所以该库是最普遍的C语言程序加载库。

stdio.h是以往的C和C++的头文件,cstdio是标准C++(STL),且cstdio中的函数都是定义在一个名字空间std里面的,如果要调用这个名字空间的函数,必须得加std::或者在文件中声明use namespace std。

在C语言中,stdio.h 头文件是主要的。而在后来的C++语言中,C只是C++的一个子集,且C++中,已不推荐再用C的类库,但为了对已有代码的保护,还是对原来的头文件支持。

cstdio是c++从C的stdio.h继承来的,在前面加C同时不要H后缀,在C++环境当然是选用前者,两者内容都一样,只是cstdio头文件中定义的名字被定义在命名空间std中。使用后者就会带来额外的负担,需要区分哪些是标准库C++特有的,哪些是继承过来的!!所以在C++中要尽量避免C风格的出现!!

参考https://www.cnblogs.com/youngforever/p/3172352.html

1 标准库中的头文件

C++标准库中的一切内容都被放在名字空间std中(名字空间中的内容对外是不可见的),但是带来了一个新问题,无数现有的C++代码都依赖于使用了多年的伪标准库中的功能,如声明在<iostream.h>等头文件中的功能,使用std包装标准库导致现有代码的不可用,为了兼容这种情况,标准委员会为包装了std的那部分标准库创建了新的头文件,新的头文件的文件名与旧的一样,只是没有.h这个后缀,如<iostream.h>就变成了<iostream>。对于C头文件,采用同样的方法,但还在每个头文件名前加了字符c,如<string.h>就变成了<cstring>,<stdio.h>变成了<cstdio>。最好使用新的文件头,使用新的文件头的C++程序,需要使用using namespace std或者using namespace std::指定的类名,等方法来使需要的类对于我们的代码可视。

2 自定义的头文件

为了防止头文件被重复引用,最好使用预处理定义,如下所示:

#ifndef MYHEAD_H

#define MYHEAD_H

……//头文件中的内容

#endif

(1)#ifndef:

指示符#ifndef用来检查头文件的内容是否在前面已经被定义过,如果定义过,则#ifndef与#endif之间的语句将不被执行.所以习惯上要把头文件的定义写在这两个语句之间.

如:对于MYHEAD.H这个头文件

(2) #ifdef

指示符#ifdef常常被用来判断一个预处理器常量是否已被定义,以便有条件地包含程序代码。

3 预处理相关知识

(1) #ifdef :判断一个预处理常量是否被定义,如#infef DEGUG

(2) #ifndef:判断一个预处理常量是否没被定义

(3) #define:定义一个预处理常量,如#define DEBUG

(4) #include

(5) #endif

(6) 对预处理常量的定义还可以在编译时进行,如CC –D DEBUG main.c

(7)编译C++程序时,编译器自动定义了一个预处理器名字__cplusplus(注意前面有两个下划线),因此可以根据这个来判断该程序是否是C++程序,以便有条件地包含一些代码,如:

(8)在编译C程序时,编译器会自动定义预处理常量__STDC__。当然__cplusplus和__STDC__ 不会同时被定义;

(9)另外两个比较有用的预定义常量是__LINE__(记录文件已经被编译的行数)和__FILE__(包含正在被编译的文件名称)。使用如下:

(10) __DATE__:编译日期,当前被编译文件的编译日期

(11) __TIME__:编译时间,当前被编译文件的编译时间

格式如:hh:mm:ss

 08:17:05   Oct 31 2006

(12) C库头文件的C++名字总是以字母C开头,后面去掉.h,如assert.h在C++中为cassert;

assert()是C语言标准库中提供的一个通用预处理器宏。常用其来判断一个必需的前提条件,以便程序能够正确执行。与其关联的头文件是:#include <assert.h>

其c++名字是:cassert

C库头文件的C++名字总是以字母C开头

注:在C++中使用C标准库中的头文件时,一定要使用using namespace std;来使其处在一个名字空间中,才能正确使用

(13)在C++中头文件后缀各不相同,因此标准的C++头文件没有指定后缀

4 C++中的文件输入输出

头文件:#include <fstream>

使用文件输入输出实例:

头文件里有些什么?

头文件的使用主要体现在两个方面,一个是重(音chóng)用(即多次使用),另一个是共用。

那些提供标准库函数的头文件就是为了重用。很多程序或工程可能会用到这些标准库函数,把它们写在头文件里面,每次使用的时候只需要包含已经完成的头文件就可以了。

头文件的共用主要体现在C++的多文件结构中。由于目前的程序规模较小,尚不需要用到多文件结构,所以在此对头文件的共用不作展开。有兴趣的读者可以查阅相关书籍。

那么,如果我们要自己编写一个可以重用的头文件,里面应该写些什么呢?

类似于标准库函数,我们在头文件里面应该模块化地给出一些函数或功能。另外还应该包括独立实现这些函数或功能的常量、变量和类型的声明。

 

类型 名字 功能
语言支持 cstddef
语言支持 limits 定义各种数据类型最值常量
语言支持 climits
语言支持 cfloat
语言支持 cstdlib 提供支持程序启动和终止的宏和函数
语言支持 new
语言支持 typeinfo
语言支持 exception 异常处理类
语言支持 cstdarg
语言支持 csetjmp
语言支持 csignal
输入\输出 iostream 支持标准流cin、cout、cerr和clog的输入和输出;以及多字节。
输入\输出 iomanip 参数化输入/输出
输入\输出 ios 定义iostream的基类;
输入\输出 istream 基本输入流
输入\输出 ostream 基本输出流
输入\输出 sstream 基于字符串的流
输入\输出 fstream 支持文件的流输入和输出;
输入\输出 iosfwd 输入/输出系统使用的前置声明
输入\输出 streambuf 底层输入/输出支持
输入\输出 cstdio 为标准流提供C样式的输入和输出;
输入\输出 cwchar 宽字符处理及输入/输出
诊断 stdexcept 标准异常类
诊断 cassert
诊断 cerrno 定义错误码
一般工具 utility 定义重载的关系运算符,简化关系运算符的写入;
一般工具 funcional 定义许多函数对象类型和支持函数对象的功能
一般工具 memory 给容器、管理内存的函数和auto_ptr模板类定义标准内存分配器;
一般工具 ctime 支持系统时间函数
字符串处理 string 字符串类
字符串处理 cctype 字符处理
字符串处理 cwctype 宽字符分类
字符串处理 cstring 为处理非空字节序列和内存块提供函数;
字符串处理 cwchar 宽字符处理及输入/输出
字符串处理 cstdlib 字符串转换
容器类 vector STL 动态数组容器
容器类 list STL 线性列表容器
容器类 deque STL 双端队列容器
容器类 queue STL 队列容器
容器类 stack STL 堆栈容器
容器类 map STL 映射容器
容器类 set STL 集合容器
容器类 bitset STL 位集容器
迭代器 iterator
算法 algorithm STL 通用算法
算法 cstdlib 声明C标准库函数bsearch()和qsort(),进行搜索和排序;
算法 ciso646
数值操作 complex 复数类
数值操作 vararray
数值操作 numeric
数值操作 cmath 定义数学函数
数值操作 cstdlib 提供的函数可以提取整数的绝对值,对整数进行取余和日期表示
本地化 locale
本地化 clocale 定义本地化函数