头文件类型 | 约定 | 示例 | 说明 |
---|---|---|---|
C++旧式风格 | .h结尾 | iostream.h | C++程序可以使用 |
C旧式风格 | .h结尾 | math.h | C、C++程序可以使用 |
C++新式风格 | 没有拓展名(真棒 | iostream | C++程序可以使用,注意需要加using namespace std |
转换后的C | 加上前缀c,没有拓展名 | cmath | C++程序可以使用,可以使用不是C的特性,如namespace std |
接下来了解using namespace std是什么
先说namespace
using namespace std是一种编译指令
namespace是名称空间,而std就是名称空间的一种
名称空间支持是一项C++特性,旨在编写大型程序以及将多个厂商现有的代码组合起来的程序时更容易,它还有助于组织程序
潜在问题是,两个封装好的产品,可能都包含同名函数,而名称空间就可以将产品封装在一个叫做名称空间的单元中,这样既可以用名称空间的名称来指出使用哪个厂商的产品
例如,如果两个封装好的产品都包括wanda()函数,M公司的产品和P公司的产品如何区分呢?他们会利用名称空间定义
M::wanda() P::wanda()
这样程序就可以利用名称空间来区分不同版本
现在来了解std
函数、类等,都作为C++编译器的标准组件被放置在名称空间std中(当头文件拓展名内没有.h的时候,情况才是如此
这意味着iostream中定义的cout变量其实是std::cout,endl是endl::std
因此虽然程序中cout,cin等变量是赤裸裸的,但是我们应该知道,它的全名是std::cout
std::cout;//使用std名称空间下的cout,而不是直接使用cout std::endl;//同理
但是这样做很麻烦不是吗?
因此using应运而生,using namespace std编译指令就表示,可以使用std名称空间中定义的名称,而不必使用std前缀
这是一个偷懒的做法,在大型项目中还是应该老老实实的进行名称空间定义下的变量
不过!!
如果我们又想偷懒,又不会影响大型项目中其他变量,那怎么办呢
还有一个更好的做法,即指定需要的变量
很难理解对吧,举个例子
比如std和stm空间下的cout,我只需要std空间下的,但是我直接using namespace std就会让整个std空间下的变量都可以简写,怎么办呢?
那么我就可以通过下列编译指令来指定声明某一个名称空间下的某一个变量,而不是声明某一个名称空间下整体的变量
using std::cout; using std::endl; using std::cin;
这相当于对std名称空间定义下的cout,endl,cin变量进行了一个using声明,这样便可以直接使用cin和cout等,而不用加上std::前缀
想要增删也很方便,直接多声明几个或者删去某个变量的声明即可,十分方便