名字空间
在大型程序(尤其是由很多人一起撰写的程序)中,常常遇到不同的变量、函数等取了同样的名字而造成名字的冲突。例如:
1
2 extern int inflag;
3 main() {
4 inflag = 30;
5 }
这个问题在C++中,可以使用名字空间(namespace)来解决冲突:
1 namespace mfc {
2 int inflag;
3
4 }
5
1 namespace owl {
2 int inflag;
3
4 }
1 int main() {
2 mfc::inflag = 3;
3 owl::inflag = -823;
4 }
::被称作域操作符,可以用来访问某个名字空间中的成员。此外还可以用来访问与局部变量同名的全局变量,比如
1 int i;
2 int main() {
3 int i = 0;
4 i = i +1;
5 ::i = i;
6 }
更多名字空间的例子:
1 namespace mfc {
2 int inflag;
3 void function(int a) {
4
5 }
6 typedef unsigned short WORD;
7 struct Teacher{
8
9 };
10 class Student {
11
12 };
13 #define PI 3.14159
14 }
注意:宏定义不受名字空间限制
访问名字空间中的成员:
1 int main() {
2 mfc::inflag = 10;
3 mfc::function(mfc::inflag);
4 mfc::WORD w;
5 struct mfc::Teacher t;
6 class mfc::Student s;
7 double p = PI;
8 }
简化名字空间成员的访问:using declaration
1 int main() {
2 using mfc::inflag;
3 inflag = 3;
4 mfc::function( inflag );
5 }
更多的简化访问:using direction
1 int main() {
2 using namespace mfc;
3 inflag = 3;
4 function(inflag);
5 WORD w;
6 owl::inflag = 10;
7 }
CategoryCpp