- 命名空间的引入
- 为什么要使用命名空间?
- 命名空间的使用
- 小tips
大家都知道如果在一个函数中定义两个名字相同的变量,便会报重复定义的错误。这种情况大家都能够避免,但是当出现下面情况时就会出现命名空间的问题。
一个中大型软件往往由多名程序员共同开发,会使用大量的变量和函数,不可避免地会出现变量或函数的命名冲突。当所有人的代码都测试通过,没有问题时,将它们结合到一起就有可能会出现命名冲突。
例如小李和小韩都参与了一个文件管理系统的开发,它们都定义了一个全局变量 fp,用来指明当前打开的文件,将他们的代码整合在一起编译时,很明显编译器会提示 fp 重复定义(Redefinition)错误。
所谓命名空间,是指标识符(变量、函数等)的各种可见范围。
如:我们常见的std就是标准命名空间。
为什么要使用命名空间?- 解决命名冲突问题
- 在c++中,名称可以是变量、函数、结构、枚举、类,工程量越大,名称冲突可能性越大。
- 另外使用多个厂商的类库时,也可能导致名称冲突。
namespace Awei{
//variables, functions, classes
} //注意这里没有逗号
namespace Yaya{
void func(){}
int num;
}
Yaya :: func();
Yaya :: num = 100;
完整示例
#include小tips//命名空间A namespace A{ int num; void func(void){ //c++中如果没有参数,也不能空着,要填写void std :: cout << "A中的func函数" << std :: endl; } } namespace B{ int num; void func(void){ std :: cout << "B中的func函数" << std :: endl; } } int main(){ //func(); //报错不知道使用哪个命名空间 A :: func(); B :: func(); A :: num = 10; B :: num = 20; std :: cout << "A的num值为:" << A :: num << std :: endl; std :: cout << "B的num值为:" << B :: num << std :: endl; return 0; }
为了简化使用,我们可以在代码里面指定使用哪一个命名空间,eg:
using namespace A;
加上上面一句在代码里面我们直接调用func不会出错,会默认调用A的func。
加上之后对原来使用作用域访问的方式不会产生影响。
ps: 你如果使用多个命名空间,比如这里你又加了一句:
using namespace B;
他直接调用func又会报错,因为不知到找哪个下面的func了。(但是对每个命名空间特有的成员直接访问不会有问题)



