using namespace std;究竟是什么?

351 阅读3分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第9天,点击查看活动详情

2 using namespace std简要解析

2.1 C++头文件介绍

头文件类型约定示例说明
C++旧式风格.h结尾iostream.hC++程序可以使用
C旧式风格.h结尾math.hC、C++程序可以使用
C++新式风格没有拓展名(真棒iostreamC++程序可以使用,注意需要加using namespace std
转换后的C加上前缀c,没有拓展名cmathC++程序可以使用,可以使用不是C的特性,如namespace std

2.2 namespace

using namespace std是一种编译指令

namespace是名称空间,而std就是名称空间的一种

名称空间支持是一项C++特性,旨在编写大型程序以及将多个厂商现有的代码组合起来的程序时更容易,它还有助于组织程序

潜在问题是,两个封装好的产品,可能都包含同名函数,而名称空间就可以将产品封装在一个叫做名称空间的单元中,这样既可以用名称空间的名称来指出使用哪个厂商的产品

例如,如果两个封装好的产品都包括wanda()函数,M公司的产品和P公司的产品如何区分呢?他们会利用名称空间定义

 M::wanda()
 P::wanda()

这样程序就可以利用名称空间来区分不同版本

2.3 std

函数、类等,都作为C++编译器的标准组件被放置在名称空间std中(当头文件拓展名内没有.h的时候,情况才是如此

这意味着iostream中定义的cout变量其实是std::cout】

因此虽然程序中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空间下的变量都可以简写,这样只为了一个cout而using整个std是否有点过了,那能不能只简化std::coutcout呢?当然可以。

我们可以通过下列编译指令来指定声明某一个名称空间下的某一个变量,而不是声明某一个名称空间下整体的变量

 using std::cout;
 using std::endl;
 using std::cin;     

这相当于对std名称空间定义下的cout,endl,cin变量进行了一个using声明,这样便可以直接使用cin和cout等,而不用加上std::前缀

想要增删也很方便,直接多声明几个或者删去某个变量的声明即可,十分方便