1. 我们一个大型的程序通常由不同模块构成,而且不同的模块又常常是由不同的人来开发。所以不同模块中的类和函数就有可能发生重名,这样链接的时候就会出现二义性甚至是多义性,这时候就用到了命名空间。
千万注意:声明命名空间的时候千万不要写在函数体内部,这样会报错
命名空间的语法:
namespace 命名空间名{
各种声明或定义
}
//我们也可以不写命名空间名,这样就是声明了一个匿名空间,如果我们有东西不想被其他文件看到,就放到这个空间里。可以定义多个匿名空间,每个匿名空间都是独立存在的,互不干扰
2.命名作用域也可以嵌套使用
namespace A{
namespace B{
}
}
使用的时候
using namespace A::B;
或者
A::B::名字
3.分文件编写时的几个注意点:
1.命名和定义分开写的时候都要加上namespace作用域
2.使用的时候有两种写法。其他的注意点看下面的代码段就可以
//test.h
#ifndef TEST_H //注意,这里千万不要写成TEST.H,必须用下划线,用点不行
#define TEST_H
//命名空间A的定义
namespace A {
void print();
}
//命名空间B的定义
namespace B {
void print1();
}
#endif
//test.cpp
#include<iostream>
#include"test.h"
using namespace std;
//命名空间A的实现
namespace A {
void print() {
cout << "test函数被调用" << endl;
}
}
//命名空间B的实现
namespace B {
void print1() {
cout << "copy test函数被调用" << endl;
}
}
//main.cpp
#include<iostream>
#include"test.h"
using namespace std;
int main() {
//访问的时候有多种方式,一种是写using namespace 空间名,这样这里面的所有东西下面都可以使用
using namespace A;
print();
//但是如果我们只想访问这个空间里的某个对象,就可以这样写
B::print1();
}