一、命名空间的引入
(1)命名空间namespace,是C++引入的解决全局变量和函数名冲突的机制。
(2)C语言没有命名空间,但是java和python等都有
(3)namespace的关键点有两个,一个是怎么解决名称冲突,一个是如何访问变量。
二、C语言怎么解决名称冲突
出现名称冲突的原因
(1)大项目中会有很多C文件,在C文件当中所有的全局变量都是extern属性的,因此会出现名称冲突的问题。
(2)一个项目中,项目的全局变量和函数能够相互访问,所以就出现了名称冲突的问题。
C中解决名称冲突的方法
(3)C中解决名称冲突的方法,一:同一个文件不能太大,而且该文件由一个人编写。二:将多个C文件组成一个模块,并在模块中统一加上相关的前缀。三:不需要访问外部的函数和全局变量全部使用static设置为静态函数或者静态全局变量。
(4)早期C++也是这么解决的。
三、命名空间如何解决名称冲突问题
(1)为实现命名空间机制,C++引入了namespace关键字,定义为namespace xx{}。其中xx是命名空间的名字,{}中为作用域。
(2)一个特定名称的namespace中,大括号内部变量,类和函数都属于该命名空间。
(3)在命名空间内相互之间可以直接使用内部的函数、类和变量。
(4)跨命名空间引用函数和变量时,需要指定命名空间的空间名称和变量名或函数名。
(5)命名空间可以看作变量名和函数名的前缀。
(6)命名空间的本质是对全局变量和函数在一定范围内链接链接属性的更改。
四、关于语言特性的思考
(1)语言特性是语言通过关键字和符号实现一种功能特性,如namespace、template、运算符重载、 面向对象等。
(2)语言特性必定解决对应着解决某种问题,必定在某方面对程序员有帮助。
(3)语言特性越多或设计越复杂,语言就越难,则语言越厉害。
(4)语言特性体现为某种语法,本质上靠的是编译工具的支持。
(5)编程语言学习的难度在于是否能够熟练的使用语言特性