C++——命名空间

简介: 介绍C++命名空间

C++的简单介绍

C语言是结构化和模块化的语言,适合处理较小规模的程序。对于复杂的问题,规模较大的程序,需要高度的抽象和建模时,C语言则不合适

为了解决软件危机, 20世纪80年代, 计算机界提出了OOP<(objectoriented programming:面向对象)思想,支持面向对象的程序设计语言应运而生。

1982年,Bjarne Stroustrup博士在C语言的基础上引入并扩充了面向对象的概念,发明了一种新的程序语言。为了表达该语言与C语言的渊源关系,命名为C++。因此:C++是基于C语言而产生的,它既可以进行C语言的过程化程序设计,又可以进行以抽象数据类型为特点的基于对象的程序设计,还可以进行面向对象的程序设计


命名空间

在C/C++中,变量、函数和类都是大量存在的,这些变量、函数和类的名称将都存在于全局作用域中,可能会导致很多冲突。使用命名空间的目的是对标识符的名称进行本地化,以避免命名冲突或名字污染namespace关键字的出现就是针对这种问题的。

我们来看一个例子:

此时的变量与库里面的冲突了,这时候我们就可以利用命名空间来解决这个问题👇

定义命名空间,需要使用到namespace关键字,后面跟命名空间的名字,然后跟着一对{}即可,{}中即为命名空间的成员。

在这里,我们可以看到,打印出来的是函数rand的地址。编译器的默认查找是先去局部查找,局部没有rand,这时候就得去全局找,此时的头文件在预处理之时就会被展开,展开之后就会找到rand,所以打印出rand的地址。(这里如果为了更清晰一点,可以用%p打印)

这里需要注意到的是:局部找不到之后,去全局找,全局找不到之后,并不会去命名空间里找!!!

如何证明?很简单,我们可以在ST命名空间里在定义一个变量,然后去进行打印,看看结果是怎么样的:

到了这里,我们只是会定义命名空间,那怎么去使用命名空间,命名空间中成员该如何使用呢? 进行指定即可

对于命名空间:命名空间中的内容,既可以定义变量,也可以定义函数 、一些类型:

这里用命名空间的好处就在于防止发生命名冲突(不同的空间,不同的指定,不会造成冲突)👇

除此之外,命名空间还可以进行嵌套:


实际上,为了避免命名冲突,C++把官方库内容定义到了命名空间——std

(同一个工程中允许存在多个相同名称的命名空间,编译器最后会合成同一个命名空间中)

相关文章
|
16天前
|
编译器 C语言 C++
C++命名空间的using声明
C++命名空间的using声明
12 0
|
1月前
|
C++
【C++ 命名空间】C++ 命名空间与嵌套命名空间入门指南
【C++ 命名空间】C++ 命名空间与嵌套命名空间入门指南
30 0
|
1月前
|
程序员 C++ 索引
在C++语言中Vector的命名空间的作用
在C++语言中Vector的命名空间的作用
15 0
|
1月前
|
程序员 C语言 C++
C++入门(头文件,命名空间,作用域,输入输出流,引用,缺省参数,函数重载)
C++入门(头文件,命名空间,作用域,输入输出流,引用,缺省参数,函数重载)
|
1月前
|
编译器 C++
c++关于命名空间内变量和函数及全局变量的使用和作用域
c++关于命名空间内变量和函数及全局变量的使用和作用域
35 1
|
1月前
|
编译器 C++
开心档之 C++ 命名空间
开心档之 C++ 命名空间
|
2月前
|
编译器 C语言 C++
初谈C++:命名空间、输入&输出
初谈C++:命名空间、输入&输出
33 0
|
3月前
|
Java 编译器 Linux
开启C++之旅(上):探索命名空间与函数特性(缺省参数和函数重载)
开启C++之旅(上):探索命名空间与函数特性(缺省参数和函数重载)
121 0
|
15天前
|
C语言 C++ 数据格式
【C++对于C语言的扩充】C++与C语言的联系,命名空间、C++中的输入输出以及缺省参数
【C++对于C语言的扩充】C++与C语言的联系,命名空间、C++中的输入输出以及缺省参数
|
3天前
|
C++
C++命名空间详解
C++命名空间详解
12 0