在
C/C++
中,变量、函数和后面要学到的类都是大量存在的,这些变量、函数和类的名称将都存在于全局作
用域中,可能会导致很多冲突。使用命名空间的目的是
对标识符的名称进行本地化
,以
避免命名冲突或名字
污染
,
namespace
关键字的出现就是针对
在
C/C++
中,变量、函数和后面要学到的类都是大量存在的,这些变量、函数和类的名称将都存在于全局作
用域中,可能会导致很多冲突。使用命名空间的目的是
对标识符的名称进行本地化
,以
避免命名冲突或名字
污染
,
namespace
关键字的出现就是针对这种问题的。
1
命名空间定义
定义命名空间,需要使用到
namespace
关键字
,后面跟
命名空间的名字
,然
后接一对
{}
即可,
{}
中即为命名空间的成员。
举例:
namespace
bit
{
//
命名空间中可以定义变量
/
函数
/
类型
int
rand
=
10
;
int
Add
(
int
left
,
int
right
)
{
return
left
+
right
;
}
struct
Node
{
struct
Node
*
next
;
int
val
;
};
}
//2.
命名空间可以嵌套
// test.cpp
namespace
N1
{
int
a
;
int
b
;
int
Add
(
int
left
,
int
right
)
{
return
left
+
right
;
}
namespace
N2
{
int
c
;
int
d
;
int
Sub
(
int
left
,
int
right
)
{
return
left
-
right
;
}
}
}
//3.
同一个工程中允许存在多个相同名称的命名空间
,
编译器最后会合成同一个命名空间中。
// ps
:一个工程中的
test.h
和上面
test.cpp
中两个
N1
会被合并成一个
// test.h
namespace
N1
{
int
Mul
(
int
left
,
int
right
)
{
return
left
*
right
;
}
}
2
命名空间使用
命名空间的使用有三种方式:
加命名空间名称及作用域限定符
int
main
()
{
printf
(
"%d\n"
,
N::a
);
return
0
;
}
使用
using
将命名空间中某个成员引入
using
N::b
;
int
main
()
{
printf
(
"%d\n"
,
N::a
);
printf
(
"%d\n"
,
b
);
return
0
;
}
使用
using namespace
命名空间名称引入
using
namespce N
;
int
main
()
{
printf
(
"%d\n"
,
N::a
);
printf
(
"%d\n"
,
b
);
Add
(
10
,
20
);
return
0
;
}