1、命名空间的引入
- 命名空间namespace,是C++引入的一种解决全局变量和函数名冲突的机制。C语言没有namespace,但是C++及之后的Java、Python等语言都有。
- namespace的关键点有2个:一是如何解决名称冲突,二是如何合法访问变量。
2、C语言如何解决名称冲突
- 大项目中会有很多C文件,全局变量和函数都是extern链接属性,因此名称冲突是客观存在的。一个项目是一个单体程序,项目中的全局变量和函数理应能互相访问,因此名称冲突是客观存在的。
- C语言中解决名称冲突的办法是:第一,同一个C文件不要太大,由一个人写;第二,每个C文件(或几个C文件构成的一个模块)中所有全局变量和函数前加统一的唯一前缀(例如:usb_init / spi_init);第三,不需要文件外访问的全局变量和函数前面都加static关键字。
- C语言的解决方案可行,C++早期就是这样做的,但这种方法太low,于是引入了命名空间的机制。
3、命名空间如何解决问题
- 为实现命名空间机制,C++引入了namespace关键字,定义格式为namespace xx{ };
- 一个特定名称的namespace的一对大括号内部定义的变量、函数、类等均属于该命名空间内。
- 在命名空间内部互相引用时可以直接使用变量名、函数名等。
- 跨命名空间互相引用时必须同时指定被引用方的命名空间名和变量名/函数名才可以找到
- 命名空间看起来就好像一种前