1.命名空间的简介
大家都知道在编程中如果在一个函数中定义两个名字相同的变量,便会报重定义错误。命名空间就是为解决这类问题解决的。
比如有两个学生都叫张三,如果没有命名空间,会导致有人喊张三的时候导致混乱出错。比如一个张三在1班,一个张三在2班,喊的时候1班的张三或2班的张三就不会有歧义或错误,那1班和2班就是两个命名空间
所谓命名空间,是指标识符(变量或函数等)的各种可见范围。
2.为什么要使用命名空间?
- 解决命名冲突的问题
- 在C++中,名称可以是变量、函数、结构体、枚举、类,工程量越大,名称相互访问的可能性越大
- 另外使用多个厂商的类库时,也可能导师名称冲突
3.命名空间的定义
命名空间的定义非常简单,就是关键字namespace用大括号包裹住代码就行
namespace myName{
// 命名空间中的代码
}
// 注意此处没有分号
4.命名空间的使用
(1) 我们先来看一个简单的例子
#include <iostream>
namespace 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引入指明当前的作用域
#include <iostream>
namespace 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)同时指明命名空间
#include <iostream>
namespace 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
#include <iostream>
namespace 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;
}
感谢千锋教育的视频,简单清晰的讲明白了命名空间
版权声明:本文为stephen_curry300原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。