- 1.命名空间的简介
- 2.为什么要使用命名空间?
- 3.命名空间的定义
- 4.命名空间的使用
大家都知道在编程中如果在一个函数中定义两个名字相同的变量,便会报重定义错误。命名空间就是为解决这类问题解决的。
比如有两个学生都叫张三,如果没有命名空间,会导致有人喊张三的时候导致混乱出错。比如一个张三在1班,一个张三在2班,喊的时候1班的张三或2班的张三就不会有歧义或错误,那1班和2班就是两个命名空间
所谓命名空间,是指标识符(变量或函数等)的各种可见范围。
2.为什么要使用命名空间?- 解决命名冲突的问题
- 在C++中,名称可以是变量、函数、结构体、枚举、类,工程量越大,名称相互访问的可能性越大
- 另外使用多个厂商的类库时,也可能导师名称冲突
命名空间的定义非常简单,就是关键字namespace用大括号包裹住代码就行
namespace myName{
// 命名空间中的代码
}
// 注意此处没有分号
4.命名空间的使用
(1) 我们先来看一个简单的例子
#includenamespace A { int num; void func(void){ std::cout << "A中的fun" << std::endl; } } namespace B { int num; void func(void){ std::cout << "B中的fun" << std::endl; } } int main(){ 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; }
输出结果如下:
A中的fun B中的fun A中的num = 10 B中的num = 20
(2)使用using引入指明当前的作用域
#includenamespace A { int num; void func(void){ std::cout << "A中的fun" << std::endl; } } namespace B { int num; void func(void){ std::cout << "B中的fun" << std::endl; } } using namespace B; int main(){ func(); num = 10; std::cout << "B中的num = " << B::num << std::endl; return 0; }
输出结果如下:
B中的fun B中的num = 10
可以发现这里指明了当前的命名空间为B,就可以省略前面的B::
(3)同时指明命名空间
#includenamespace A { int num; void func(void){ std::cout << "A中的fun" << std::endl; } } namespace B { int num; void func(void){ std::cout << "B中的fun" << std::endl; } } using namespace A; using namespace B; int main(){ func(); num = 10; std::cout << "B中的num = " << B::num << std::endl; return 0; }
这时候编译没法通过,因为编译器不知道你是用A的还是B的
但是假如B中有一个不重名的变量score
#includenamespace A { int num; void func(void){ std::cout << "A中的fun" << std::endl; } } namespace B { int num; double score; void func(void){ std::cout << "B中的fun" << std::endl; } } using namespace A; using namespace B; int main(){ func(); // 报错 num = 10; // 报错 score = 98.5; // 正常 std::cout << "B中的num = " << B::num << std::endl; return 0; }
暑期编程PK赛 得CSDN机械键盘等精美礼品!感谢千锋教育的视频,简单清晰的讲明白了命名空间



