文章目录
前言
这篇文章将主要介绍C++命名空间相关知识点
一、C++命名空间的意义
以我现在的理解,命名空间意义在于可以让不同的人使用同名的函数、变量和结构体,这一点在C语言中实现不了,在C语言中出现同名的函数的时候会报出链接错误,只能修改函数名字来解决这个问题。
二、C++命名空间的使用
在C++ 中我们可以这样定义命名空间
namespace test{
int a = 0;
int Add(int x, int y) {
return x + y;
}
struct list {
int val;
//
};
}
struct list {
int val;
//
};
我们可以这样使用命名空间里面的东西。 test::Add()
,如果命名空间全展开或者局部展开,我们就可以直接正常使用,不需要 test::
这样用了。
int main() {
int a = 9;
int b = test::Add(2, 3);
cout << "hello world" << endl;
cout << b;
return 0;
}
目前我了解的域分为三种:全局域、局部域和命名空间域名。 程序首先会去局部域寻找,找不到再去全局域,再找不到就去命名空间域名(如果命名空间域全部展开的话)。
这里命名空间全展开的方式是这样的:using namespace test;
这里的展开不是像头文件那样展开,而是类似于开放一个权限,让程序能从命名空间里面找东西。
当然除了全展开外,还有局部展开:using test::a;
这里局部展开可能会与全部变量起冲突。
三、命名空间的特性
1 命名空间嵌套
命名空间里面可以嵌套命名空间
namespace test{
namespace test1 {
int a = 0;
int Add(int x, int y) {
return x + y;
}
}
int a = 0;
int Add(int x, int y) {
return x + y;
}
struct list {
int val;
//
};
}
2 同一命名空间在不同文件中的使用
下图展示了命名空间test在stack.h和test.cpp这两个文件中的使用,这里程序会自动将这两处test所包含的内容合并在一起。
总结
这是我目前对C++命名空间的理解,如果后续有新理解,我还会加进来的。